Skip to content

scp 命令:安全复制

1. 命令简介

scp(Secure Copy)是一个基于 SSH 协议在网络上进行安全文件传输的命令行工具。它可以在本地主机和远程主机之间,或者两个远程主机之间复制文件和目录。scp 使用与 ssh 相同的认证方式,并确保数据传输的机密性和完整性。

2. 基本语法

bash
scp [选项] 源文件 目标文件

3. 常用选项

  • -r:递归复制整个目录
  • -p:保留原文件的修改时间、访问时间和权限
  • -q:静默模式,不显示进度信息
  • -C:压缩传输的数据
  • -P:指定远程主机的端口号
  • -i:指定身份文件(私钥)
  • -l:限制带宽,单位 Kbit/s

4. 基础使用示例

  1. 从本地复制文件到远程服务器:

    bash
    scp local_file.txt user@remote_host:/path/to/destination/
  2. 从远程服务器复制文件到本地:

    bash
    scp user@remote_host:/path/to/remote_file.txt /local/directory/
  3. 复制整个目录:

    bash
    scp -r local_directory/ user@remote_host:/path/to/destination/
  4. 在两个远程主机之间复制文件:

    bash
    scp user1@host1:/path/to/file user2@host2:/path/to/destination/

5. 进阶使用技巧

  1. 使用非默认端口:

    bash
    scp -P 2222 file.txt user@remote_host:/path/to/destination/
  2. 压缩传输数据:

    bash
    scp -C large_file.txt user@remote_host:/path/to/destination/
  3. 保留文件属性:

    bash
    scp -p file.txt user@remote_host:/path/to/destination/
  4. 使用特定的私钥文件:

    bash
    scp -i ~/.ssh/custom_key file.txt user@remote_host:/path/to/destination/

6. 实用示例

  1. 复制多个文件:

    bash
    scp file1.txt file2.txt user@remote_host:/path/to/destination/
  2. 限制传输速度:

    bash
    scp -l 1000 large_file.txt user@remote_host:/path/to/destination/
  3. 使用通配符复制文件:

    bash
    scp /path/to/source/*.txt user@remote_host:/path/to/destination/
  4. 在复制时重命名文件:

    bash
    scp local_file.txt user@remote_host:/path/to/destination/new_name.txt

7. 注意事项

  • scp 默认使用 SSH 端口(通常是 22)。
  • 大文件传输可能需要较长时间,考虑使用 -C 选项压缩数据。
  • 确保你有目标位置的适当权限。
  • 使用公钥认证可以避免每次输入密码。

8. 相关命令

  • ssh:安全 Shell 协议
  • rsync:远程文件同步工具
  • sftp:安全文件传输协议
  • ssh-keygen:生成 SSH 密钥对

9. 技巧与建议

  1. 使用 SSH 配置文件简化连接:
    ~/.ssh/config 中设置主机别名,然后可以使用:

    bash
    scp file.txt myserver:/path/to/destination/
  2. 使用进度条显示传输进度:

    bash
    scp -v file.txt user@remote_host:/path/to/destination/
  3. 结合 tar 命令传输大量小文件:

    bash
    tar czf - directory | ssh user@remote_host "cd /path/to/destination && tar xzf -"
  4. 使用 scp 和管道组合:

    bash
    echo "Hello, World!" | scp - user@remote_host:/path/to/destination/hello.txt

scp 是一个简单但强大的文件传输工具,它结合了文件复制的便利性和 SSH 的安全性。对于需要在不同主机之间安全传输文件的系统管理员和开发人员来说,scp 是一个不可或缺的工具。虽然有些情况下 rsync 可能更适合(例如,需要增量传输时),但对于大多数简单的文件传输任务,scp 仍然是首选工具。