安全复制(英语:Secure copy,缩写SCP)是指在本地主机与远程主机或者两台远程主机之间基于Secure Shell(SSH)协议安全地传输电脑文件。“SCP”通常指安全复制协议或者程序本身。
SCP是一种基于BSD RCP(英语:Rcp (Unix))协议的网络传输协议, 支持同一个网络上主机之间传输文件(英语:File transfer)。SCP使用Secure Shell(SSH)完成数据传输,并使用同时用它进行身份认证,从而确保数据传输时(英语:Data in transit)的真实性和保密性。客户端可以向服务器发送(上传)文件,可选包含其基本属性(权限、时间戳)。客户端也可以请求(下载)一个服务器的文件或目录。SCP默认通过TCP端口22运行。如同RCP,没有RFC定义该协议的细节。
正常来说,一个客户端发起到远程主机的SSH连接,并请求在远程服务器上启动一个SCP进程。远程SCP进程可以以两种模式之一操作:
对大多数SCP客户端来说,源模式通常使用-f标识(意为from)触发,而槽模式用-t(意为to)触发。这些标志是在内部使用,没有在SCP源代码之外留有文档。
在过去,远程到远程的安全复制中,SCP客户端打开一个到源主机的SSH连接,并请求它打开到目的地的SCP连接。(远程到远程模式不支持打开两个SCP连接,并使用始发客户端作为一个中介)。应格外注意的是,当在密码或键盘交互认证模式下操作时,SCP不能用于远程的从源复制到目的地,因为这将向源显示目的地服务器的认证凭证。但是,使用基于密钥或GSSAPI(英语:GSSAPI)的方法可以规避此点,因为不需要用户输入。
最近以来,远程到远程模式支持通过发起转移的客户端路由流量,即使它是转移的第三方。这种方法下,授权凭据必须仅驻留在发起客户端上,即第三方。
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程序的语法类似cp (copy)的语法:
复制文件到主机:
scp @:/
从主机复制文件:
scp @:/ scp -r @:/
注意,如果远程主机使用非默认端口22,可以在命令中指定。例如,从主机复制一个文件。
scp -P 2222 @:/
由于安全复制协议仅实现文件传输,GUI的SCP客户端很少,因为实现它需要额外的功能(至少要有目录列出)。例如,WinSCP默认为SFTP协议。即使在SCP模式下操作,WinSCP等客户端通常也不是纯粹的SCP客户端,因为他们必须用其他手段实现额外的功能(例如ls命令)。这反过来带来了平台依赖性问题。
SFTP客户端是更全面的通过SSH管理文件的工具。