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 明文无认证,只用于设备引导等特殊场景。