首页/网络/协议速查/SCP 与其现代替代

SCP 与其现代替代

scp 是「基于 SSH 复制文件」的命令行工具;OpenSSH 9.0 起底层已改为 SFTP 协议,做增量同步请上 rsync。

协议速查网络更新于 2026-10-13

SCP 与其替代

scp 是基于 SSH 的文件复制命令,用法与 cp 相似,区别是路径的一端可以是远程主机。OpenSSH 9.0 起,scp 默认改用 SFTP 协议传输,可用 -O 退回旧协议,因此通配符由谁展开、符号链接如何处理这些细节都发生了变化,老脚本升级后需要实测。要做增量同步、断点续传或目录比对,rsync 更合适;需要交互式浏览远端文件,用 sftp。

常用选项

-P指定 SSH 端口,注意是大写 P
-r递归复制目录
-i指定私钥文件
-O退回旧 SCP 协议,OpenSSH 9.0 起可用
-p保留修改时间与权限
-l限制带宽,单位 Kbit/s

常用形态

常用形态
scp file.tar.gz user@host:/tmp/            # 上传
scp -r ./dist user@host:/var/www/          # 递归复制目录
scp -P 2222 user@host:/tmp/a.log .         # 非默认端口,下载到当前目录
scp -i ~/.ssh/id_ed25519 file user@host:/tmp/   # 指定私钥
scp -p -l 8000 big.iso user@host:/data/    # 保留时间并限速

三个工具怎么选

工具适合做什么不适合什么
scp单次复制少量文件,语法最简单增量同步、大批量小文件
sftp交互式浏览、按需取放文件脚本化批量同步
rsync增量同步、断点续传、目录比对需要目标端也支持时的即席小操作

典型使用场景

  • 发布产物推送:把构建结果复制到目标服务器指定目录
  • 临时取日志:从远端取回单个文件用于分析
  • 跨主机搬数据:不依赖共享存储,用 SSH 通道直接传
  • 自动化脚本步骤:CI 流程里复制少量构件
  • 受控环境下单文件迁移:不便安装额外工具的场景
新版默认走 SFTP 后,通配符由远端 shell 展开,而旧协议在客户端展开,脚本里含通配符的调用要实测确认。同时它对符号链接的处理也随协议版本变化,同步网站目录树这类任务优先用 rsync,语义更明确、可重复执行。另外首次连接某台主机会要求确认主机密钥,自动化场景需要提前把信任信息准备好,否则脚本会卡在交互提示上。

易错点

  • 把 -P 写成小写 -p:前者指定端口,后者只是想保留时间戳,参数含义完全不同
  • 用 scp 做目录增量同步:每次都整体复制,文件一大就是成倍的时间与带宽浪费
  • 脚本里依赖通配符展开行为,升级 OpenSSH 后匹配范围变化,传了不该传的文件
  • 复制大量小文件时未加压或未改用 rsync:连接开销远大于数据本身
  • 覆盖目标文件前没有备份:scp 不做版本保留,误覆盖后无法回溯

数据来源与参考

  • OpenSSH scp 手册
  • RFC 4253(SSH 传输层)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌