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,语义更明确、可重复执行。另外首次连接某台主机会要求确认主机密钥,自动化场景需要提前把信任信息准备好,否则脚本会卡在交互提示上。