scp 完整详细使用教程
scp 基于ssh协议安全拷贝文件,语法:
plaintext
scp [可选参数] 源文件 目标地址
端口参数注意:
– ssh 小写 -p 指定端口
– scp 大写 -P 指定端口,极易混淆
一、常用参数清单
参数 作用
-r 递归复制整个目录(文件夹必须加)
-P port 指定ssh端口,大写P
-p 保留文件原有权限、修改时间
-C 开启压缩传输,大文件提速
-v 打印详细日志,排错调试
-q 静默模式,不输出进度
-l 限速值 限制带宽,单位KB/s
二、四大核心场景语法
场景1:本地文件 → 上传到远程服务器
格式:
bash
scp 本地路径 用户名@远程IP:远程路径
示例:
bash
# 单个文件上传
scp /opt/app.tar.gz root@192.168.2.10:/data/
# 上传整个文件夹,必须加 -r
scp -r /opt/myfile root@192.168.2.10:/data/
场景2:远程文件 → 下载到本地
格式:
bash
scp 用户名@远程IP:远程文件路径 本地保存路径
示例:
bash
# 下载单个文件到本地当前目录
scp root@192.168.2.10:/data/app.tar.gz ./
# 下载远程文件夹到本地
scp -r root@192.168.2.10:/data/logs /home/local/
场景3:非默认SSH端口(22以外)
服务器ssh端口改为 2345,使用大写 -P :
bash
# 上传带端口
scp -P 2345 local.zip root@192.168.2.10:/tmp/
# 下载带端口
scp -P 2345 root@192.168.2.10:/tmp/local.zip ./
场景4:两台远程服务器之间互传(A服务器直接发给B服务器)
你在本地电脑执行,让服务器A把文件发给服务器B:
bash
scp root@A_IP:/data/file.tar root@B_IP:/backup/
注意:需要A服务器可以连通B服务器,或者本机同时能ssh两台机器。
三、进阶实用用法
1. 保留文件原始属性(时间、权限)
bash
scp -rp /test root@192.168.2.10:/data
2. 传输时开启压缩,外网大文件提速
bash
scp -Cr 本地大文件夹 root@IP:/target
3. 限制传输速度,防止占满带宽
限制速度为 1024KB/s(1MB/s)
bash
scp -l 1024 big.iso root@192.168.2.10:/tmp
4. 调试排错:-v 输出详细过程
连接失败、握手异常时使用:
bash
scp -vP 2345 test.txt root@192.168.2.10:/tmp
5. 使用通配符批量传输多个文件
需要用引号包裹通配符,避免本地shell解析:
bash
# 下载远程所有 .log 文件到本地
scp root@192.168.2.10:”/var/log/*.log” ./logs/
四、配合ssh免密登录(彻底不用输密码)
1. 本地生成ssh密钥对
bash
ssh-keygen
# 一路回车,不设置密码即可免密
2. 把公钥推送到远程服务器
bash
ssh-copy-id -P 2345 root@192.168.2.10
之后所有scp、ssh操作都不再需要输入密码。
五、常见坑与报错解决
1. 报错:Permission denied
– 远程目标目录没有写入权限,换到 /tmp 测试,或者chmod修改目录权限。
2. 端口错误:连接超时
scp 必须用大写 -P ,许多人误用小写 -p 导致连不上。
3. 拷贝文件夹忘记加 -r
会提示 not a regular file,目录传输强制带上 -r 。
4. 目标路径带空格
需要用双引号把远程路径括起来。
六、替代方案:rsync(比scp更适合增量同步)
scp每次全量覆盖,rsync只传输变更文件,推荐日常备份:
bash
# 增量上传
rsync -avzP -e “ssh -p2345” 本地目录 root@IP:/远程目录





