一、scp 概述
scp(Secure Copy)是基于 SSH 协议的安全文件传输工具,支持在本地与远程主机之间加密复制文件和目录。
特点:
- 加密传输,保障数据安全。
- 支持文件权限、时间戳等元数据的保留。
- 可通过 SSH 密钥或密码认证。
二、常用命令选项
选项 | 说明 |
---|---|
-r | 递归复制目录(必须用于目录) |
-v | 显示详细输出(调试用) |
-q | 安静模式(不显示进度/错误) |
-c | 指定 SSH 客户端程序(如 ssh -p 22) |
-P | 指定 SSH 端口(默认 22) |
-i | 指定私钥文件(替代密码登录) |
-o | 覆盖 SSH 选项(如 -o StrictHostKeyChecking=no) |
-h | 以人类可读格式显示文件大小(如 1K) |
-l | 限制上传/下载带宽(如 -l 100k) |
–progress | 显示传输进度条 |
三、使用实例
1. 本地文件 → 远程主机
scp /local/path/file.txt user@remote_ip:/remote/path/
将本地 file.txt 复制到远程主机的 /remote/path/ 下。
2. 远程文件 → 本地
scp user@remote_ip:/remote/path/file.txt /local/path/
反向操作,将远程文件拉取到本地。
3. 本地目录 → 远程主机(递归)
scp -r /local/path/directory user@remote_ip:/remote/path/
-r
必须用于目录,否则会报错。
4. 指定 SSH 端口
若远程主机 SSH 端口非默认 22:
scp -P 2222 /local/file.txt user@remote_ip:/remote/path/
5. 使用密钥认证(免密码)
提前将公钥 ~/.ssh/id_rsa.pub
上传到远程 ~/.ssh/authorized_keys
:
scp -i ~/.ssh/private_key.pem /local/file.txt user@remote_ip:/remote/path/
6. 保留文件权限
默认保留权限,若需强制设置:
scp -o PreservePermissions=true /local/file.txt user@remote_ip:/remote/path/
7. 排除特定文件
使用 --exclude
过滤文件:
scp -r --exclude="temp.log" /local/path/ user@remote_ip:/remote/path/
8. 限制带宽速度
限制上传速度为 100KB/s:
scp -l 100k /local/file.txt user@remote_ip:/remote/path/
9. 显示传输进度
scp --progress /local/file.txt user@remote_ip:/remote/path/
四、注意事项
1. 权限问题
- 确保远程目录存在且用户有写入权限。
- 若需sudo权限,可使用 sudo scp,但需谨慎操作。
2. 防火墙设置
- 确认远程 SSH 端口(默认 22)已放行。
3. 大文件传输优化
- 启用压缩:-C(自动协商压缩算法)。
- 分块传输:split + scp 分段传输(适合超大数据)。
4. 断点续传
- scp 不原生支持断点续传,但可借助 rsync 或第三方工具(如 lftp)。
五、高级用法
1. 通过中间主机中转
scp -o ProxyCommand="ssh -W %h:%p user@middle_host" /local/file.txt user@remote_ip:/remote/path/
2. 并行复制多个文件
结合 xargs 或 parallel 工具实现多线程加速。
六、总结
- 适用场景:一次性安全文件传输、脚本自动化备份。
- 局限性:不适合频繁小文件传输或增量同步(推荐 rsync)。
- 安全建议:优先使用 SSH 密钥认证,避免密码明文传输。
通过以上示例和选项,可灵活应对大多数文件传输需求。如需进一步优化,可结合 ssh-copy-id 快速部署密钥,或使用 scp2 等增强版本。
评论区