安全复制

安全复制(英语:secure copy,缩写作 SCP)是指在本地主机与远程主机或者两台远程主机之间基于Secure Shell(SSH)协议安全地传输电脑档案[1]。“SCP”通常指安全复制协议或者程序本身[2]

安全复制协议

SCP是一种基于BSD RCP英语Rcp (Unix)协议的网络传输协议[3] 支持同一个网络上主机之间传输文件。SCP使用Secure Shell(SSH)完成数据传输,并使用同时用它进行身份认证,从而确保数据传输时真实性保密性。客户端可以向服务器发送(上传)文件,可选包含其基本属性(权限、时间戳)。客户端也可以请求(下载)一个服务器的文件或目录。SCP默认通过TCP端口22运行。如同RCP,没有RFC定义该协议的细节。

功能

正常来说,一个客户端发起到远程主机的SSH连接,并请求在远程服务器上启动一个SCP进程。远程SCP进程可以以两种模式之一操作:

  • 源模式,读取文件(通常从磁盘)并将其发送回客户端。
  • 槽(sink)模式,接收客户端发送的文件,并将它们写入到远程主机(通常到磁盘)。

对大多数SCP客户端来说,源模式通常使用-f标识(意为from)触发,而槽模式用-t(意为to)触发。这些标志是在内部使用,没有在SCP源代码之外留有文档。

远程到远程模式

在过去,远程到远程的安全复制中,SCP客户端打开一个到源主机的SSH连接,并请求它打开到目的地的SCP连接。(远程到远程模式不支持打开两个SCP连接,并使用始发客户端作为一个中介)。应格外注意的是,当在密码或键盘交互认证模式下操作时,SCP不能用于远程的从源复制到目的地,因为这将向源显示目的地服务器的认证凭证。但是,使用基于密钥或GSSAPI英语GSSAPI的方法可以规避此点,因为不需要用户输入。

最近以来,远程到远程模式支持通过发起转移的客户端路由流量,即使它是转移的第三方。这种方法下,授权凭据必须仅驻留在发起客户端上,即第三方。[需要解释]

有关shell配置文件的问题

SCP不希望与ssh登录的shell用文本通信。这是由于文本传输的ssh配置文件(例如.bashrc文件中的echo "Welcome")会被解释为一条错误消息,并且一个空行(echo "")将导致scp死锁为等待错误消息完成。

安全复制(远程文件复制程序)

SCP程序是将SCP协议实现为服务守护程序或客户端的软件工具。它是执行安全复制的程序。SCP服务器程序通常与SCP客户端是相同的程序。SCP服务器软件可以普通机器或防火墙配置为仅接受22端口上的SCP流量的极高安全标准的机器上运行。[4]

使用最广泛的SCP程序可能是命令行界面scp程序,这在大多数SSH实现中提供。scp程序是rcp命令的安全模拟。scp程序是所有想提供SCP服务的SSH服务器的必备,scp功能也作为SCP服务器。

部分SSH实现提供scp2程序,这使用SFTP协议而非SCP,但提供与相同的命令行界面scpscp此时通常符号链接scp2

通常来说,scp程序的语法[5]类似cp (copy)的语法:

复制文件到主机:

scp SourceFile user@host:directory/TargetFile

从主机复制文件:

scp user@host:directory/SourceFile TargetFile
scp -r user@host:directory/SourceFolder TargetFolder

注意,如果远程主机使用非默认端口22,可以在命令中指定。例如,从主机复制一个文件。

scp -P 2222 user@host:directory/SourceFile TargetFile

由于安全复制协议仅实现文件传输,GUI的SCP客户端很少,因为实现它需要额外的功能(至少要有目录列出)。例如,WinSCP默认为SFTP协议。即使在SCP模式下操作,WinSCP等客户端通常也不是纯粹的SCP客户端,因为他们必须用其他手段实现额外的功能(例如ls命令)。这反过来带来了平台依赖性问题。

SFTP客户端是更全面的通过SSH管理文件的工具。

参考文献

  1. ^ Linux and Unix scp command. [4 August 2015]. (原始内容存档于2018-02-21). 
  2. ^ Pechanec, Jan. How the SCP protocol works. Jan Pechanec's weblog. Oracle. [4 August 2015]. (原始内容存档于2015-10-11). 
  3. ^ scp - FreeBSD (history section). [25 June 2012]. (原始内容存档于2021-02-25). 
  4. ^ SCP Server Installation and Configuration. [17 June 2016]. (原始内容存档于2016-11-27). 
  5. ^ "scp(1) - Linux man page" http://linux.die.net/man/1/scp页面存档备份,存于互联网档案馆

参见