scp
(Secure Copy Protocol)是一个用于在本地主机和远程主机之间安全地复制文件或目录的命令。它使用 SSH(Secure Shell)协议来进行安全的文件传输。以下是 scp
命令的基本用法和详解:
1. 基本用法
代码语言:javascript复制scp [选项] [源文件或目录] [目标主机:目标路径]
[选项]
:scp
支持多种选项,用于设置不同的参数,例如-r
用于递归复制目录,-p
用于保留文件的权限等。[源文件或目录]
: 要复制的本地文件或目录路径。[目标主机:目标路径]
: 目标主机和目标路径。如果省略了目标主机,则默认为本地主机。目标路径可以是相对路径或绝对路径。
2. 选项
-r
: 递归地复制整个目录。-P
: 指定非标准 SSH 端口。-p
: 保留文件的修改时间、访问时间和权限。-i
: 指定用于身份验证的密钥文件。
3. 示例
从本地复制到远程主机
代码语言:javascript复制scp localfile username@remote:/path/to/destination
从远程主机复制到本地
代码语言:javascript复制scp username@remote:/path/to/file /local/path
递归复制整个目录
代码语言:javascript复制scp -r localdir username@remote:/path/to/destination
指定非标准 SSH 端口
代码语言:javascript复制scp -P 2222 localfile username@remote:/path/to/destination
保留文件权限和时间
代码语言:javascript复制scp -p localfile username@remote:/path/to/destination
使用特定密钥文件
代码语言:javascript复制scp -i keyfile.pem localfile username@remote:/path/to/destination
4. 使用 SSH 密钥对身份验证
scp
使用 SSH 协议进行安全传输,因此可以通过 SSH 密钥对来进行身份验证,而不必输入密码。确保公钥已经被添加到目标主机的 ~/.ssh/authorized_keys
文件中。
5. 注意事项
- 文件权限: 在目标主机上,
scp
将尊重目标文件的权限设置。确保目标路径具有适当的写入权限。 - 目录递归: 使用
-r
选项进行递归复制目录时,确保目标路径存在。 - SSH 端口: 如果目标主机使用非标准 SSH 端口,可以使用
-P
选项指定端口号。 - SSH 密钥: 使用
-i
选项指定用于身份验证的密钥文件。
6. 高级用法和示例
通过跳板主机(Jump Host)进行传输
有时候,需要通过一个跳板主机来连接目标主机。可以通过 -J
选项指定跳板主机:
scp -J jumpuser@jumphost:jumpfile user@remote:/path/to/destination
限制带宽
可以使用 -l
选项限制传输的带宽,例如限制为 100kbps:
scp -l 100 localfile username@remote:/path/to/destination
使用不同的 SSH 配置文件
如果有多个 SSH 配置文件,可以使用 -F
选项指定配置文件路径:
scp -F /path/to/ssh/config localfile username@remote:/path/to/destination
传输时显示进度
使用 -v
选项显示详细信息,而 -q
选项则关闭输出。可以通过 --progress
选项显示传输进度:
scp --progress localfile username@remote:/path/to/destination
7. 使用通配符
scp
支持通配符,可以使用通配符来传输多个文件:
scp localdir/*.txt username@remote:/path/to/destination
8. 使用压缩
通过 -C
选项使用压缩传输,可以减少网络传输时间:
scp -C localfile username@remote:/path/to/destination
9. 使用代理跳板主机
如果通过 SOCKS 代理跳板主机,可以使用 -o
选项指定 ProxyJump
选项:
scp -o ProxyJump=proxyuser@proxyhost:proxyport localfile username@remote:/path/to/destination
总结
scp
提供了许多选项和功能,可以根据实际需求进行灵活配置。无论是简单的文件传输还是复杂的跳板主机、限制带宽、显示进度等高级用法,scp
都是一个强大而实用的工具。详细的选项和用法可以查阅 scp
的 man 手册(man scp
)。