每天一个 Linux 命令(9)—— scp

900 阅读4分钟

这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战

命令简介

scp 是 secure copy 的简写,用于在 Linux 下进行远程拷贝文件的命令。scp 采用 OpenSSH 的认证方法,利用 ssh 实现数据的传输,因而具有同等的安全保障。当使用 scp 命令复制文件时,如果需要交互认证,远程系统首先会要求用户提供密码或密码短语。经过认证之后,文件复制才会开始。如果 OpenSSH 设置了无密码的注册方式,可以省略交互认证过程。

同 scp 命令类似的命令有 cp,不过 cp 只是在本机进行拷贝不能跨服务器,而且 scp 传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读 read only system 时,用 scp 可以帮你把文件移出来。另外,scp 还非常不占资源,不会提高多少系统负荷,在这一点上,rsync 就远远不及它了。虽然 rsync 比 scp 会快一点,但当小文件众多的情况下,rsync 会导致硬盘 I/O 非常高,而 scp 基本不影响系统正常使用。

注意,使用 scp 命令把源文件复制到目的文件时,scp 通常不会保护已存在的目的文件。如果目的文件已经存在,scp 会覆盖目的文件,代之以源文件的内容。如果目的文件不存在,scp 首先会使用指定的目的文件名创建一个空文件,然后再使用源文件的内容填充新建的空文件。

命令格式

scp [参数] [原路径] [目标路径]

命令参数

命令解释
-1强制 scp 使用 OpenSSH 协议第 1 版。
-2强制 scp 使用 OpenSSH 协议第 2 版。
-4强制 scp 仅用 IPv4 地址。
-6强制 scp 仅用 IPv6 地址。
-B采用批处理方式(禁止提示用户输入密码或密码短语)。
-C启用压缩方式(把 -C 选项传递给 ssh 命令,通过 ssh 命令实现压缩)。
-c cipher选择加密传输数据时使用的密码。这个选项指定的密码可以直接传递给 ssh。
-F ssh-conf指定基于用户的 ssh 配置文件,直接传递给 ssh 命令。
-i idfile指定一个密钥文件,以便能够使用其中的私钥与远程系统进行认证。这个选项指定的密钥文件可以直接传递给 ssh。
-l limit以 Kbps 为单位,指定传输速度,限制使用的带宽。
-o ssh-opts采用 ssh_config 配置文件的格式(如 -o Port=24),向 ssh 传递指定的选项。当 scp 命令没有单独的选项能够指定 ssh 选项时,-o 选项是非常有用的。完整的 ssh 选项详见 ssh_config 配置文件手册页的说明。
-P port指定连接远程主机的端口。
-p保持原始文件的最近修改时间、最近访问时间和模式字段等。
-q安静方式。禁止显示传输进度以及 ssh 给出的警告与诊断信息等。
-r递归地复制整个目录。注意,在递归复制文件期间,如果遇到符号链接文件,scp 将会采用符号链接文件引用的文件,或进入其引用的目录。
-S program指定处理加密连接的程序。指定的程序必须能够处理 ssh 选项。
-v显示 scp 命令(包括 ssh 命令)的处理过程与调试信息,有助于诊断连接、认证与配置等问题。

应用实例

  1. 从本地服务器复制到远程服务器:
1. scp local_file remote_username@remote_ip:remote_folder
2. scp local_file remote_username@remote_ip:remote_file
3. scp local_file remote_ip:remote_folder
4. scp local_file remote_ip:remote_file

第 12 个指定了用户名,命令执行后需要输入用户密码,第 1 个仅指定了远程的目录,文件名字不变,第 2 个指定了文件名。
第 34 个没有指定用户名,命令执行后需要输入用户名和密码,第 3 个仅指定了远程的目录,文件名字不变,第 4 个指定了文件名。

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

从远程复制到本地的 scp 命令与上面的命令雷同,只要将从本地复制到远程的命令后面 2 个参数互换顺序就行了。

参考文档

  • scp命令
  • 《Linux 常用命令简明手册》—— 邢国庆编著