李守中
该站已迁往根域名 https://lishouzhong.com
需要注意,迁移后的文章的 url 可能会发生变化。
域名 https://note.lishouzhong.com 下的内容将不再更新,但已有内容会永久保留。

SCP

Table of Contents

1. 简介

scp 是 secure copy 的缩写,相当于 cp + SSH。它的底层是 SSH 协议,默认端口是 22,相当于先使用 ssh 命令登录远程主机,然后再执行拷贝操作。

scp 主要用于以下三种复制操作:

  1. 本地复制到远程。
  2. 远程复制到本地。
  3. 两个远程系统之间的复制。

使用 scp 传输数据时,文件和密码都是加密的,不会泄漏敏感信息。

2. 基本语法

scp 的语法类似 cp 的语法: scp <source> <destination>source 是文件当前的路径, destination 是目标位置。它们都可以包含用户名和主机名。

scp user@host:foo.txt bar.txt 将远程主机 host 上用户 user 家目录下的 foo.txt ,复制到本机当前目录的 bar.txt 。可以看到,主机与文件之间要使用冒号 : 分隔。

scp 会使用 SSH 客户端的配置文件 ~/.ssh/config ,如果配置文件里面定义了主机的别名,这里也可以使用别名连接。

scp 支持一次复制多个文件: scp <source1> <source2> </destination/dir>source1source2 两个文件,复制到 </destination/dir> 路径下。

如果被复制的文件,在目标位置已有同名文件,scp 会在没有警告的情况下覆盖同名文件。

3. 用法示例

3.1. 本地文件复制到远程

复制本机文件到远程系统: scp </path/to/local_file> <user_name>@<host>:</path/to/target_file>

将本机整个目录拷贝到远程主机: scp -r </path/to/local_dir> <user_name>@<host>:</path/to/remote_dir> 在远程主机 </path/to/remote_dir> 目录下创建一个新目录,名称与本机源目录相同,文件被拷贝到新目录下。

将本机目录下的所有内容拷贝到远程目录: scp -r </path/to/local_dir>/ <user_name>@<host>:</path/to/remote_dir> 源地址结尾有 / ,将本地 </path/to/local_dir> 路径下的文件拷贝到远程主机上的 </path/to/remote_dir> 文件夹下。不创建新的目录。

3.2. 远程文件复制到本地

从远程主机复制文件到本地: scp <user_name>@<host>:</path/to/remote/file> </path/to/local_file> 或者 scp <user_name>@<host>:</path/to/remote/file> </path/to/local_dir>

拷贝一个远程目录到本机目录下: scp -r <user_name>@<host>:</path/to/remote_dir> </path/to/local_dir> 在本地 </path/to/local_dir> 目录下创建新目录,名称与远程主机源目录相同,文件被拷贝到新目录下。

拷贝远程目录下的所有内容,到本机目录下: scp -r <user_name>@<host>:</path/to/remote_dir>/ </path/to/local_dir>` 源地址结尾有 / ,将远程主机 </path/to/remote_dir> 的内容拷贝到本地主机的 </path/to/local_dir> 文件夹下。不创建新的目录。

3.3. 两个远程系统之间的复制

本机发出指令,从远程主机 host1 拷贝到远程主机 host2: scp <host1_user_name>@<host1>:</path/to/source> <host2_user_name>@<host2>:</path/to/target>

系统提示输入两个帐户的密码。数据直接从 host1 传到 host2 不经过执行 scp 命令的机器 ( 本机 )。

4. 常用配置项

  • -c 指定文件拷贝数据传输的加密算法。比如 scp -c blowfish ... 指定加密算法为 blowfish。
  • -C 是否在传输时压缩文件。
  • -F 指定 ssh_config 文件 scp -F </path/to/ssh_config> ...
  • -i 指定密钥 scp -i private_key.pem ..
  • -l 限制传输数据的带宽速率,单位是 Kbit/secscp -l 80 ... 带宽限制为 80Kb/s,即 10KB/s。
  • -p 保留修改时间 modification time 、访问时间 access time 、文件状态 mode 等原始的文件信息
  • -P 指定远程主机的 SSH 端口。如果远程主机使用默认端口 22,可以不用指定,否则需要用 -P 参数在命令中指定。
  • -q 关闭显示拷贝的进度条。
  • -r 以递归方式复制目录。
  • -v 显示详细的输出。


Last Update: 2023-05-18 Thu 08:58

Generated by: Emacs 28.2 (Org mode 9.5.5)   Contact: [email protected]

若正文中无特殊说明,本站内容遵循: 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议