Zenith Horizon

scp 命令使用技巧

2026/04/04
loading

scp​(Secure Copy Protocol)是基于 SSH 的安全文件复制命令,可在本地与远程主机之间或两个远程主机之间加密传输文件。

基本语法

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

常用选项

选项

说明

​-P port​

指定远程主机的 SSH 端口(大写 P)

​-r​

递归复制整个目录

​-p​

保留原文件的修改时间、访问时间和权限模式

​-q​

静默模式,不显示进度信息

​-C​

压缩传输数据(传输时压缩,落地后解压)

​-i identity_file​

指定私钥文件(用于密钥认证)

​-v​

详细模式,显示调试信息

​-l limit​

限制传输带宽(单位:Kbit/s)

​-o option​

传递 SSH 配置选项(如 -o ConnectTimeout=10​)

常见使用示例

1. 本地文件复制到远程主机

# 将本地文件上传到远程用户的主目录
scp /local/file.txt user@remote_host:~

# 上传到远程指定路径并重命名
scp /local/file.txt user@remote_host:/remote/dir/new_name.txt

# 指定端口(例如 2222)
scp -P 2222 /local/file.txt user@remote_host:~

2. 从远程主机复制文件到本地

# 下载远程文件到当前目录
scp user@remote_host:~/remote_file.txt .

# 下载到指定本地路径
scp user@remote_host:~/remote_file.txt /local/dir/

3. 复制整个目录

# 上传目录(必须加 -r)
scp -r /local/dir user@remote_host:~/backup/

# 下载目录
scp -r user@remote_host:~/data /local/

4. 两个远程主机之间直接传输

# 从 host1 复制到 host2(数据流经过本地机器)
scp user1@host1:/path/file user2@host2:/path/

5. 保留文件属性

# 保留时间戳和权限
scp -p /local/file user@remote_host:~

6. 使用指定私钥文件

scp -i ~/.ssh/mykey.pem -r /local/data user@remote_host:~

7. 限制带宽(限制为 512 Kbit/s)

scp -l 512 large_file.zip user@remote_host:~

安全与注意事项

  1. ​覆盖行为​:scp​ 默认覆盖目标路径的同名文件且无警告,需自行确认。

  2. ​身份验证​:依赖 SSH 配置,支持密码或密钥认证。首次连接需确认主机指纹。

  3. ​通配符​:支持简单的通配符,如 scp user@host:~/logs/*.log .​,但需注意引号(防止本地 shell 提前展开)。

  4. ​性能​:对于大量小文件,scp -r​ 效率较低,建议打包后传输或改用 rsync​。

  5. ​替代工具​:OpenSSH 9.0+ 开始将 scp​ 底层替换为 SFTP,更安全;但在旧系统中仍为传统协议。推荐在新环境中考虑使用 rsync -avP​ 或 sftp​。

错误排查

错误信息

常见原因

​Connection refused​

远程 SSH 服务未运行或端口错误

​Permission denied​

用户名/密码错误、密钥未添加或权限问题

​No such file or directory​

源路径或目标路径错误

​scp: not a regular file​

复制目录时未使用 -r​ 选项

小技巧

  • 结合 ssh​ 代理跳板机:先建立 -L​ 隧道,或使用 -o ProxyCommand​。

  • 在脚本中使用 ssh-keyscan​ 预先接受主机密钥,避免交互提示。

  • 使用 scp -q​ 结合后台运行(&​)实现无输出传输。

以上是 scp​ 的常用使用方法,掌握后即可满足日常安全文件传输需求。

Author: Max

Permalink: /archives/scp

Published: 2026-04-04 12:38:26

Updated: 2026-04-04 12:37:48

License: 本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可

CATALOG