scp(Secure Copy Protocol)是一个基于 SSH 的工具,用于在本地和远程主机之间安全地复制文件或目录。它可以在 Linux、Unix、macOS 和 Windows(通过安装 OpenSSH)系统上使用。scp 的工作原理是通过 SSH 加密传输文件,确保数据的安全性。

基本语法

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

其中:

  • 源文件路径:你想要复制的文件或目录的路径。
  • 目标路径:目标主机的文件路径,格式为 [用户名@主机IP或域名:路径]

常见用法

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

将本地文件传输到远程服务器的指定路径:

scp /path/to/local/file username@remote_host:/path/to/remote/directory

示例

scp /home/user/file.txt user@192.168.1.2:/home/user/remote_directory

该命令将 file.txt 从本地复制到远程主机 192.168.1.2 上的 /home/user/remote_directory

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

将远程文件传输到本地指定路径:

scp username@remote_host:/path/to/remote/file /path/to/local/directory

示例

scp user@192.168.1.2:/home/user/remote_file.txt /home/user/local_directory

该命令将远程主机上的 remote_file.txt 文件复制到本地 /home/user/local_directory 目录。

3. 复制目录

使用 -r 选项来递归地复制整个目录。

  • 从本地复制目录到远程服务器
scp -r /path/to/local/directory username@remote_host:/path/to/remote/directory

示例

scp -r /home/user/local_folder user@192.168.1.2:/home/user/remote_folder

将本地的 local_folder 目录及其内容复制到远程服务器的 remote_folder 目录。

  • 从远程复制目录到本地
scp -r username@remote_host:/path/to/remote/directory /path/to/local/directory

示例

scp -r user@192.168.1.2:/home/user/remote_folder /home/user/local_folder

将远程服务器上的 remote_folder 目录复制到本地的 local_folder 目录。

4. 指定端口号

如果远程服务器的 SSH 服务使用非默认端口(默认是 22),你可以使用 -P 选项指定端口号。

scp -P port_number /path/to/local/file username@remote_host:/path/to/remote/directory

示例

scp -P 2222 /home/user/file.txt user@192.168.1.2:/home/user/remote_directory

将本地的 file.txt 文件通过端口 2222 复制到远程服务器。

5. 显示传输进度

使用 -v(verbose)或 -C(压缩传输)选项,可以在复制文件时显示详细的传输信息和进度。

scp -v /path/to/local/file username@remote_host:/path/to/remote/directory

示例

scp -v /home/user/file.txt user@192.168.1.2:/home/user/remote_directory

该命令会显示传输过程的详细信息。

6. 限制带宽

使用 -l 选项可以限制传输的带宽,单位是 Kbit/s。

scp -l 1000 /path/to/local/file username@remote_host:/path/to/remote/directory

示例

scp -l 5000 /home/user/file.txt user@192.168.1.2:/home/user/remote_directory

限制传输速率为 5000 Kbit/s。

7. 使用密钥认证

如果你使用 SSH 密钥认证来代替密码,可以使用 -i 选项指定私钥文件:

scp -i /path/to/private_key /path/to/local/file username@remote_host:/path/to/remote/directory

示例

scp -i /home/user/.ssh/id_rsa /home/user/file.txt user@192.168.1.2:/home/user/remote_directory

该命令使用指定的私钥文件进行身份验证并复制文件。

8. 从本地复制文件到远程服务器并压缩

如果你希望复制文件时进行压缩以节省带宽,可以使用 -C 选项启用压缩。

scp -C /path/to/local/file username@remote_host:/path/to/remote/directory

示例

scp -C /home/user/file.txt user@192.168.1.2:/home/user/remote_directory

该命令将 file.txt 文件进行压缩后传输。

9. 其他常见选项

  • -q:静默模式,禁止显示任何输出。
  • -o:使用 SSH 配置选项,例如指定某些 SSH 参数。
scp -o "StrictHostKeyChecking no" /home/user/file.txt user@192.168.1.2:/home/user/remote_directory

示例汇总

  1. 将本地文件传输到远程主机scp /home/user/file.txt user@192.168.1.2:/home/user/remote_directory
  2. 从远程主机复制文件到本地scp user@192.168.1.2:/home/user/remote_file.txt /home/user/local_directory
  3. 复制目录到远程主机scp -r /home/user/local_folder user@192.168.1.2:/home/user/remote_folder
  4. 指定端口号scp -P 2222 /home/user/file.txt user@192.168.1.2:/home/user/remote_directory
  5. 使用 SSH 密钥认证scp -i /home/user/.ssh/id_rsa /home/user/file.txt user@192.168.1.2:/home/user/remote_directory

总结

scp 是一种方便而安全的文件传输工具,可以在本地和远程服务器之间进行文件传输,支持目录复制、压缩传输、密钥认证等功能。了解并掌握这些基本用法和常见选项,能帮助你更高效地管理和传输文件。如果有其他问题或需要进一步的帮助,随时告诉我!