scp 是干什么的
scp 基于 SSH 加密通道做文件复制,一条命令就能完成本机与远端的互传,权限与认证完全复用 SSH 的机制。它适合小批量、一次性的文件交换;目录用 -r 递归复制,非标准端口用大写 -P 指定。新版 OpenSSH 的 scp 底层已改为走 SFTP 协议。
基本信息
| 上传 | scp 文件 用户@主机:/路径 |
|---|---|
| 下载 | scp 用户@主机:/路径/文件 . |
| 目录 | -r 递归复制 |
| 端口 | -P 指定非标准端口(大写) |
| 保留时间戳 | -p(小写) |
典型使用场景
- 部署时把构建产物推到目标服务器
- 从服务器取回日志或配置文件做分析
- 交接批量小文件,如证书与脚本
- 跨主机搬运单个大文件并保留时间戳
- 临时联调时上传测试数据
典型用法
典型用法
scp app.tar.gz deploy@10.0.10.21:/tmp/ # 上传文件
scp -r ./conf deploy@10.0.10.21:/opt/app/ # 上传整个目录
scp -P 2222 deploy@10.0.10.21:/var/log/app.log . # 非默认端口下载
scp -p -i ~/.ssh/id_ed25519 big.iso deploy@10.0.10.21:/data/ # 指定私钥并保留时间戳
scp -O old@10.0.1.5:/tmp/file . # 老服务端不兼容时退回原协议
sha256sum app.tar.gz # 传输后本地校验
ssh deploy@10.0.10.21 'sha256sum /tmp/app.tar.gz' # 远端核对一致性常用选项
| 选项 | 作用 | 注意点 |
|---|---|---|
| -r | 递归复制目录 | 链接处理方式与 rsync 不同 |
| -P | 指定端口(大写) | 小写 -p 是保留时间戳 |
| -p | 保留时间戳与权限 | 常用于备份取回 |
| -i | 指定私钥文件 | 权限需为 600 |
| -O | 使用旧版传输协议 | 老服务端不兼容时使用 |
走跳板机或需要断点续传的场景,改用 rsync(可经 ssh 隧道)或 sftp 更合适;大量小文件直接 scp 逐个复制效率偏低,先打包再传更快。
替代方案怎么选
- 需要增量与断点续传用 rsync
- 需要交互式浏览远端目录用 sftp
- 大量小文件先打包成归档再传
- 跨网段与跳板环境复用已有的 SSH 配置
scp 会复用 SSH 配置:在 ~/.ssh/config 里定义的主机别名、跳板与私钥同样生效,可以少写一长串参数。