057 scp命令
命令说明
scp(secure copy)基于 SSH 加密通道在本地与远程主机之间(或两台远程之间)拷贝文件,语法直观、无需服务端额外配置,是最常用的跨机传文件方式。
语法
scp [选项]... 源 目标 格式:[用户@]主机:路径
常用参数
| 参数 | 说明 |
|---|---|
| -r | 递归复制整个目录 |
| -P 端口 | 指定远程 SSH 端口(注意大写 P,与 ssh 的小写 -p 不同) |
| -p | 保留文件修改时间、访问时间与模式 |
| -i 密钥 | 指定私钥文件 |
| -C | 传输时压缩,适合文本/慢链路 |
| -l 限速 | 限制带宽(Kbit/s),避免打满生产链路 |
| -v | 调试输出传输过程 |
| -o 选项 | 传递 ssh 配置,如 -o StrictHostKeyChecking=no |
| -3 | 两台远程之间互传时经本地中转 |
使用示例
$ scp app.jar root@192.168.1.20:/opt/app/
上传 jar 到远程目录
$ scp root@192.168.1.20:/var/log/nginx/error.log ./
从远程下载日志到当前目录
$ scp -r /opt/conf root@host:/backup/
递归上传整个目录
$ scp -P 2222 -i ~/.ssh/id_ed25519 a.txt user@host:~/
非标端口 + 指定密钥
$ scp user1@hostA:/data/a.tar.gz user2@hostB:/data/
远程到远程拷贝
$ scp -C -p backup.tar.gz user@host:/backup/
保留属性并压缩传输
$ scp -l 8000 big.iso user@host:/tmp/
限速 8Mbit/s 传大文件
$ scp a.txt b.txt user@host:/tmp/multi/
多个文件一次上传
实用技巧
- scp 的端口参数是大写 -P(ssh 是小写 -p),这是最高频笔误;目标路径带冒号时注意主机名与路径的分隔。
- 大量文件/反复同步场景 scp 效率低(无增量),改用 rsync -avz --progress 更优;单文件一次性传输 scp 最方便。
- scp 依赖远端有 shell 与 sftp-server 之外的完整 ssh 环境;某些受限跳板机只允许 sftp 不允许 scp。
- 路径含空格或特殊字符要加引号:scp "user@host:/my docs/a.txt" ./。
- 新版 OpenSSH 9+ 的 scp 默认走 SFTP 协议,个别老设备不兼容时可加 -O 强制传统 SCP 协议。
- 与 tftp 对比:scp 加密、有认证、走 TCP 22,适合日常;tftp 明文无认证,只用于设备引导等特殊场景。