此前,我仅使用简单的 scp
基础命令(如 scp file user@host:/path
)完成文件传输,但对更高级的参数和用法了解有限。为提升效率并应对复杂场景,现系统整理 SCP 的高级用法,包括端口指定、递归传输、限速控制、密钥认证等技巧,以便后续查阅和灵活使用。
以下是 SCP(Secure Copy Protocol) 的常用指令及详细说明,用于在本地和远程服务器之间安全复制文件:
基础语法
scp [参数] <源文件路径> <目标路径>
常用场景与指令
1. 从本地复制文件到远程服务器
scp /本地/文件路径 用户名@远程服务器IP:/远程/目标路径
示例:
scp ~/data.txt user@192.168.1.100:/home/user/documents/
2. 从远程服务器复制文件到本地
scp 用户名@远程服务器IP:/远程/文件路径 /本地/目标路径
示例:
scp user@example.com:/var/log/app.log ~/Downloads/
3. 复制整个目录(递归复制)
scp -r /本地/目录 用户名@远程服务器IP:/远程/目标路径
示例:
scp -r ~/project/ user@10.0.0.5:/opt/
4. 指定端口号
如果远程服务器的 SSH 端口不是默认的 22
,使用 -P
指定端口:
scp -P 2222 local_file.txt user@host:/path/
5. 远程服务器间直接复制
通过本地中转,将文件从 服务器A
复制到 服务器B
:
scp -3 user@serverA:/path/file user@serverB:/path/
高级用法
1. 限速传输
通过 -l
限制带宽(单位:Kbit/s):
scp -l 800 large_file.iso user@host:/backup/ # 限制为 100KB/s (800Kbit/s ≈ 100KB/s)
2. 启用压缩传输
对大文件使用 -C
压缩数据:
scp -C bigfile.tar.gz user@host:/data/
3. 使用密钥认证(无密码)
通过 -i
指定私钥文件:
scp -i ~/.ssh/id_rsa private_file.key user@host:/secure/
4. 排除指定文件/目录
需结合 rsync
,但可通过以下变通方法实现:
rsync -av --exclude='temp/' -e ssh /local/dir/ user@host:/remote/dir/
常见问题解决
1. 权限被拒绝(Permission Denied)
-
检查目标路径的写入权限:
chmod +w /目标路径
-
确保远程用户的 SSH 登录权限(如是否在
sshd_config
中允许)。
2. 连接超时(Connection Timeout)
-
检查防火墙是否放行 SSH 端口(默认
22
)。 -
确认远程服务器 IP 和端口是否正确。
3. 文件名含空格或特殊字符
-
用引号包裹路径:
scp "file with space.txt" user@host:"/path/with space/"
注意事项
-
安全性:SCP 基于 SSH 加密传输,但已逐渐被更现代的
rsync
或sftp
取代(SCP 协议存在潜在漏洞)。 -
进度显示:SCP 默认不显示进度,可使用
pv
工具或改用rsync -P
。
如果需要更复杂的文件同步操作(如增量备份),建议学习 rsync
命令。