scpSecure Copy)是一个用于在远程主机和本地计算机之间安全复制文件的命令行工具,它基于 SSH 协议提供了加密的文件传输方式。通过 scp,你可以将文件从本地系统复制到远程系统,或者从远程系统复制到本地系统。

1. scp 的基本语法

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

参数说明:

  • 源文件:要复制的文件路径,可以是本地文件或远程文件。
  • 目标文件:复制文件的目标路径,可以是本地路径或远程路径。

如果目标是远程主机,路径格式为 user@hostname:/path/to/target


2. scp 命令的常见用法

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

scp /path/to/local/file user@remote_host:/path/to/remote/directory
  • 例如,复制本地文件 /home/user/example.txt 到远程服务器 /home/user/ 目录: scp /home/user/example.txt user@192.168.1.10:/home/user/

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

scp user@remote_host:/path/to/remote/file /path/to/local/directory
  • 例如,将远程服务器 /home/user/example.txt 文件复制到本地 /home/user/ 目录: scp user@192.168.1.10:/home/user/example.txt /home/user/

2.3 从本地复制整个目录到远程服务器

使用 -r 选项(递归复制)来复制整个目录:

scp -r /path/to/local/directory user@remote_host:/path/to/remote/directory
  • 例如,将本地 /home/user/docs/ 目录复制到远程服务器 /home/user/ 目录: scp -r /home/user/docs user@192.168.1.10:/home/user/

2.4 从远程服务器复制整个目录到本地

同样使用 -r 选项:

scp -r user@remote_host:/path/to/remote/directory /path/to/local/directory
  • 例如,将远程服务器 /home/user/docs/ 目录复制到本地 /home/user/ 目录: scp -r user@192.168.1.10:/home/user/docs /home/user/

2.5 指定端口号

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

scp -P 2222 /path/to/local/file user@remote_host:/path/to/remote/directory
  • 例如,使用端口号 2222 连接到远程服务器: scp -P 2222 /home/user/example.txt user@192.168.1.10:/home/user/

2.6 限制带宽

可以通过 -l 选项限制文件传输的带宽(单位是 Kbit/s):

scp -l 1000 /path/to/local/file user@remote_host:/path/to/remote/directory
  • 例如,限制带宽为 1000 Kbit/s: scp -l 1000 /home/user/example.txt user@192.168.1.10:/home/user/

3. 常用选项

  • -r:递归复制整个目录。
  • -P:指定远程主机的端口号(注意是大写)。
  • -i:指定私钥文件进行认证。
  • -p:保留文件的修改时间、访问时间和权限。
  • -q:静默模式,不显示传输进度。
  • -l:限制带宽(Kbit/s)。

4. 使用私钥认证

如果需要使用 SSH 私钥进行身份验证,可以使用 -i 选项指定私钥文件:

scp -i /path/to/private_key /path/to/local/file user@remote_host:/path/to/remote/directory
  • 例如,使用指定的私钥文件: scp -i ~/.ssh/id_rsa /home/user/example.txt user@192.168.1.10:/home/user/

5. 示例

5.1 将本地文件上传到远程服务器

scp /home/user/example.txt user@192.168.1.10:/home/user/

5.2 将本地目录上传到远程服务器

scp -r /home/user/docs user@192.168.1.10:/home/user/

5.3 将远程文件下载到本地

scp user@192.168.1.10:/home/user/example.txt /home/user/

5.4 将远程目录下载到本地

scp -r user@192.168.1.10:/home/user/docs /home/user/

5.5 从本地复制到远程服务器,指定端口

scp -P 2222 /home/user/example.txt user@192.168.1.10:/home/user/

6. 总结

scp 是一个非常方便且安全的文件传输工具,基于 SSH 协议加密,广泛用于在本地和远程服务器之间传输文件。无论是单个文件还是整个目录的复制,scp 都能轻松实现,而且支持端口、带宽限制和使用私钥进行身份验证等功能,使其在各种场景下都能发挥强大作用。

如果你有其他问题或需要更多示例,随时告诉我!