scp(Secure Copy Protocol)是基于 SSH 的安全文件复制命令,可在本地与远程主机之间或两个远程主机之间加密传输文件。
基本语法
scp [选项] [源路径] [目标路径]
常用选项
常见使用示例
1. 本地文件复制到远程主机
# 将本地文件上传到远程用户的主目录
scp /local/file.txt user@remote_host:~
# 上传到远程指定路径并重命名
scp /local/file.txt user@remote_host:/remote/dir/new_name.txt
# 指定端口(例如 2222)
scp -P 2222 /local/file.txt user@remote_host:~
2. 从远程主机复制文件到本地
# 下载远程文件到当前目录
scp user@remote_host:~/remote_file.txt .
# 下载到指定本地路径
scp user@remote_host:~/remote_file.txt /local/dir/
3. 复制整个目录
# 上传目录(必须加 -r)
scp -r /local/dir user@remote_host:~/backup/
# 下载目录
scp -r user@remote_host:~/data /local/
4. 两个远程主机之间直接传输
# 从 host1 复制到 host2(数据流经过本地机器)
scp user1@host1:/path/file user2@host2:/path/
5. 保留文件属性
# 保留时间戳和权限
scp -p /local/file user@remote_host:~
6. 使用指定私钥文件
scp -i ~/.ssh/mykey.pem -r /local/data user@remote_host:~
7. 限制带宽(限制为 512 Kbit/s)
scp -l 512 large_file.zip user@remote_host:~
安全与注意事项
覆盖行为:scp 默认覆盖目标路径的同名文件且无警告,需自行确认。
身份验证:依赖 SSH 配置,支持密码或密钥认证。首次连接需确认主机指纹。
通配符:支持简单的通配符,如 scp user@host:~/logs/*.log .,但需注意引号(防止本地 shell 提前展开)。
性能:对于大量小文件,scp -r 效率较低,建议打包后传输或改用 rsync。
替代工具:OpenSSH 9.0+ 开始将 scp 底层替换为 SFTP,更安全;但在旧系统中仍为传统协议。推荐在新环境中考虑使用 rsync -avP 或 sftp。
错误排查
小技巧
结合 ssh 代理跳板机:先建立 -L 隧道,或使用 -o ProxyCommand。
在脚本中使用 ssh-keyscan 预先接受主机密钥,避免交互提示。
使用 scp -q 结合后台运行(&)实现无输出传输。
以上是 scp 的常用使用方法,掌握后即可满足日常安全文件传输需求。