安全复制

安全复制（，缩写作 SCP）是指在本地主机与远程主机或者两台远程主机之间基于Secure Shell（SSH）协议安全地传输電腦檔案。“SCP”通常指安全复制协议或者程序本身。

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

 功能 
正常来说，一个客户端发起到远程主机的SSH连接，并请求在远程服务器上启动一个SCP进程。远程SCP进程可以以两种模式之一操作：
 源模式，读取文件（通常从磁盘）并将其发送回客户端。
 槽（sink）模式，接收客户端发送的文件，并将它们写入到远程主机（通常到磁盘）。
对大多数SCP客户端来说，源模式通常使用-f标识（意为from）触发，而槽模式用-t（意为to）触发。这些标志是在内部使用，没有在SCP源代码之外留有文档。

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

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

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

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

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

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

通常来说，scp程序的语法"scp(1) - Linux man page" http://linux.die.net/man/1/scp 类似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管理文件的工具。

 参考文献 

 参见 

 FTP
 FTPS
 SSH文件传输协议（SFTP）
  （FISH）
 SSH
 远程外壳（RSH）
 rsync
 Telnet
 WinSCP

Category:加密协议
Category:加密软件
Category:网络文件传输协议
Category:Secure Shell