【工具】scp完整选项及用法详解

以下是 ​**scp**​ 命令的完整选项及用法详解,涵盖所有主要功能和场景:

​完整选项列表及说明​

选项说明​**-P **​指定 SSH 端口(默认 22),如 -P 2222​**-p**​保留文件的修改时间、访问时间和权限(类似 cp -p)​**-r**​递归复制整个目录及其子目录​**-C**​启用压缩传输(对慢速网络有效,但增加 CPU 负载)​**-q**​静默模式:不显示进度和警告信息​**-v**​详细模式:显示调试信息(用于排查连接问题)​**-c **​指定加密算法(如 aes256-ctr, blowfish-cbc)​**-i **​指定 SSH 私钥文件(默认使用 ~/.ssh/id_rsa)​**-l **​限制带宽(单位:Kbit/s),如 -l 1000 表示约 125KB/s​**-o **​传递 SSH 配置参数(如 -o StrictHostKeyChecking=no)​**-S **​指定替代的 SSH 客户端程序路径​**-3**​通过本地主机中转两个远程主机间的文件(不直接传输)​**-4**​强制使用 IPv4 地址​**-6**​强制使用 IPv6 地址​**-B**​使用批处理模式(禁用交互式密码输入)

​完整语法​

scp [选项] 源文件 目标路径

​源文件/目标路径支持以下格式:

本地路径:/path/to/file 或 ./file远程路径:user@host:/path/to/fileIPv6 地址需用方括号包裹:user@[2001:db8::1]:/path

​详细用法示例​

1. ​基础文件传输​

# 本地 → 远程

scp file.txt user@example.com:/remote/dir/

# 远程 → 本地

scp user@example.com:/remote/file.txt /local/dir/

# 远程 → 远程(通过本地中转)

scp user@server1:/path/file user@server2:/path/

2. ​递归复制目录​

# 复制本地目录到远程

scp -r /local/dir user@example.com:/remote/dir/

# 从远程复制目录到本地

scp -r user@example.com:/remote/dir /local/dir/

3. ​指定端口和私钥​

# 使用非默认端口(2222)和指定私钥

scp -P 2222 -i ~/.ssh/custom_key.pem file.txt user@example.com:/dir/

4. ​限速传输​

# 限制带宽为 500 Kbit/s(约 62.5 KB/s)

scp -l 500 largefile.iso user@example.com:/backups/

5. ​保留文件属性​

# 保留文件的修改时间和权限

scp -p backup.tar.gz user@example.com:/archives/

6. ​加密算法选择​

# 使用 AES-256 加密算法

scp -c aes256-ctr secret.txt user@example.com:/secure/

7. ​调试连接问题​

# 显示详细传输日志(排查连接或权限问题)

scp -v file.txt user@example.com:/tmp/

8. ​静默模式​

# 不显示任何输出(适合脚本中使用)

scp -q config.yaml user@example.com:/etc/app/

9. ​强制使用 IPv4/IPv6​

# 强制使用 IPv4

scp -4 data.log user@example.com:/logs/

# 强制使用 IPv6

scp -6 user@example.com:/logs/error.log ./

10. ​通过本地中转传输远程文件​

# 从 server1 复制到 server2(不直接连接两者)

scp -3 user@server1:/file.txt user@server2:/destination/

​高级用法​

1. ​使用 -o 传递 SSH 参数​

# 跳过主机密钥检查(慎用)

scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null file.txt user@example.com:/tmp/

# 指定 SSH 连接超时时间

scp -o ConnectTimeout=10 backup.tar user@example.com:/backups/

2. ​压缩传输大文件​

# 启用压缩(适合文本或可压缩数据)

scp -C database.dump user@example.com:/backups/

3. ​批量传输文件​

# 使用通配符传输多个文件

scp user@example.com:/logs/*.log ./local_logs/

​注意事项​

​文件路径特殊字符​

若路径含空格,用引号包裹:scp "file name.txt" user@host:/dir/

​SSH 密钥认证​

配置免密登录可避免频繁输入密码:

ssh-keygen -t ed25519

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@example.com

​大文件传输中断​

使用 rsync 替代以支持断点续传:

rsync -Pavz largefile.iso user@example.com:/backups/

​权限问题​

确保目标路径有写入权限,否则会报错 Permission denied。

​替代工具推荐​

​**rsync**​:增量同步、断点续传、更高效的文件传输。​**sftp**​:交互式文件操作(上传、下载、删除、重命名)。​**tar + ssh**​:流式传输目录(适合管道操作):

tar czf - /local/dir | ssh user@example.com "tar xzf - -C /remote/dir"