@MjSeven
https://linux.cn/article-15377-1.html
This commit is contained in:
Xingyu Wang 2022-12-24 15:23:52 +08:00
parent 11e4c251e9
commit 33badf1572

View File

@ -3,18 +3,20 @@
[#]: author: "sk https://ostechnix.com/author/sk/" [#]: author: "sk https://ostechnix.com/author/sk/"
[#]: collector: "lkxed" [#]: collector: "lkxed"
[#]: translator: "MjSeven" [#]: translator: "MjSeven"
[#]: reviewer: " " [#]: reviewer: "wxy"
[#]: publisher: " " [#]: publisher: "wxy"
[#]: url: " " [#]: url: "https://linux.cn/article-15377-1.html"
如何在 Linux 中使用 SCP 安全地传输文件 如何在 Linux 中使用 SCP 安全地传输文件
====== ======
![][0]
在网络上文件传输可以通过各种不同的方式和协议来完成。**远程复制文件**最常用的协议是 **Rsync**、**SCP** 和 **SFTP**。在本文中,我们将了解**什么是 SCP** 以及如何在 Linux 和类 Unix 操作系统中**使用 SCP 在本地和远程计算机之间安全地传输文件**。 在网络上文件传输可以通过各种不同的方式和协议来完成。**远程复制文件**最常用的协议是 **Rsync**、**SCP** 和 **SFTP**。在本文中,我们将了解**什么是 SCP** 以及如何在 Linux 和类 Unix 操作系统中**使用 SCP 在本地和远程计算机之间安全地传输文件**。
### 什么是 SCP? ### 什么是 SCP
SCP代表**安全复制**,它是一个命令行程序,在 Linux 和类 Unix 操作系统中以安全的方式在本地和远程系统之间,或在两个远程系统之间复制文件和目录。 SCP代表 <ruby>安全复制<rt>Secure Copy</rt></ruby>,它是一个命令行程序,在 Linux 和类 Unix 操作系统中以安全的方式在本地和远程系统之间,或在两个远程系统之间复制文件和目录。
使用 `scp` 命令,你可以安全地复制文件或目录: 使用 `scp` 命令,你可以安全地复制文件或目录:
@ -22,7 +24,7 @@ SCP代表**安全复制**,它是一个命令行程序,在 Linux 和类 Un
- 从远程系统到本地 - 从远程系统到本地
- 在两个远程系统之间 - 在两个远程系统之间
使用 scp 命令传输数据时,文件和目录都是加密的。因此,即使网络被破坏,犯罪者也无法获得任何有意义的数据。 使用 `scp` 命令传输数据时,文件和目录都是加密的。因此,即使网络被破坏,作恶者也无法获得任何有意义的数据。
SCP 是 openSSH 程序的一个组件,它使用 SSH 协议安全地传输文件。几乎所有现代 Linux 和 Unix 发行版都预装了 OpenSSH所以不必费心安装它。 SCP 是 openSSH 程序的一个组件,它使用 SSH 协议安全地传输文件。几乎所有现代 Linux 和 Unix 发行版都预装了 OpenSSH所以不必费心安装它。
@ -30,7 +32,7 @@ SCP 是 openSSH 程序的一个组件,它使用 SSH 协议安全地传输文
根据 openSSH 开发人员的**官方公告** 根据 openSSH 开发人员的**官方公告**
> **scp 协议已经过时了**,它不灵活且不易修复。我们建议使用更现代的协议,如 sftp 和 rsync 来代替。 > **scp 协议已经过时了**,它不灵活且不易修复。我们建议使用更现代的协议,如 `sftp``rsync` 来代替。
> >
> 参考 - [https://lists.mindrot.org/pipermail/openssh-unix-dev/2019-March/037672.html][1] > 参考 - [https://lists.mindrot.org/pipermail/openssh-unix-dev/2019-March/037672.html][1]
@ -38,8 +40,8 @@ SCP 是 openSSH 程序的一个组件,它使用 SSH 协议安全地传输文
另外SCP 的工作原理与 `cp` 命令完全相同,而 `rsync` 则会判断源目录是否有**结尾斜杠**而出现不同的行为。看一看下面的命令: 另外SCP 的工作原理与 `cp` 命令完全相同,而 `rsync` 则会判断源目录是否有**结尾斜杠**而出现不同的行为。看一看下面的命令:
- `rsync source destination/` - 将 source 目录复制到 destination 文件夹内。 - `rsync source destination/` - 将 `source` 目录复制到 `destination` 文件夹内。
- `rsync source/ destination/` - 将 source 目录的内容复制到 destination 文件夹中。 - `rsync source/ destination/` - 将 `source` 目录的内容复制到 `destination` 文件夹中。
所以,你必须反复检查是否在路径中添加了斜杠。 所以,你必须反复检查是否在路径中添加了斜杠。
@ -49,7 +51,7 @@ SCP 是 openSSH 程序的一个组件,它使用 SSH 协议安全地传输文
SCP 的通用语法如下: SCP 的通用语法如下:
```bash ```
scp [-346ABCpqrTv] [-c cipher] [-F ssh_config] [-i identity_file] [-J destination] [-l limit] [-o ssh_option] [-P port] [-S program] source ... target scp [-346ABCpqrTv] [-c cipher] [-F ssh_config] [-i identity_file] [-J destination] [-l limit] [-o ssh_option] [-P port] [-S program] source ... target
``` ```
@ -91,9 +93,9 @@ scp -r User@RemoteHost:RemoteDirectoryPath DestinationDirectory
scp <options> User@RemoteHost1:RemoteFile1 User@RemoteHost2:RemotePath scp <options> User@RemoteHost1:RemoteFile1 User@RemoteHost2:RemotePath
``` ```
注意,当你在两个远程系统之间复制文件时,流量不会通过本地系统。操作直接在两个远程系统之间进行。但是,你可以使用 `-3` 参数传递运行 scp 命令的系统的流量 注意,当你在两个远程系统之间复制文件时,流量不会通过本地系统。操作直接在两个远程系统之间进行。但是,你可以使用 `-3` 参数让流量经过你运行 `scp` 命令的系统
本地将目录从一个远程系统复制到另一个远程系统: 从你的本地系统将一个远程系统的目录复制到另一个远程系统:
``` ```
scp -r User@RemoteHost1:RemoteDirectory User@RemoteHost2:DestinationPath scp -r User@RemoteHost1:RemoteDirectory User@RemoteHost2:DestinationPath
@ -103,17 +105,17 @@ scp -r User@RemoteHost1:RemoteDirectory User@RemoteHost2:DestinationPath
SCP 命令最常用的参数有: SCP 命令最常用的参数有:
- **`-C`** : 启用压缩。C 代表压缩。使用此参数时数据传输速度会更快因为数据是压缩的。SCP 将自动在源系统上压缩,并在目标系统上解压缩。 - `-C`:启用压缩。`C` 代表 <ruby>压缩<rt>Compression</rt></ruby>。使用此参数时数据传输速度会更快因为数据是压缩的。SCP 将自动在源系统上压缩,并在目标系统上解压缩。
- **`-c <cipher>`** : c 代表加密。默认情况下SCP 使用 **AES-128** 加密方法对数据进行加密。你可以使用 `-c` 参数更改加密方法。 - `-c <cipher>``c` 代表 <ruby>加密<rt>Cipher</rt></ruby>。默认情况下SCP 使用 **AES-128** 加密方法对数据进行加密。你可以使用 `-c` 参数更改加密方法。
- **`-i <identity_file>`** : i 代表身份文件或私钥。如你所知SSH 中使用基于密码或密钥的身份验证。如果希望在传输文件时使用基于密钥的身份验证,可以使用 -i 参数指定身份文件或私钥。 - `-i <identity_file>``i` 代表 <ruby>身份<rt>Identity</rt></ruby> 文件或私钥。如你所知SSH 中使用基于密码或密钥的身份验证。如果希望在传输文件时使用基于密钥的身份验证,可以使用 `-i` 参数指定身份文件或私钥。
- **`-l limit`** : l 代表极限带宽。通过此参数,可以设置传输数据的最大带宽。它的单位是 **`Kbit/s`** - `-l limit``l` 代表 <ruby>限制<rt>Limit</rt></ruby> 带宽。通过此参数,可以设置传输数据的最大带宽。它的单位是 `Kbit/s`
- **`-F <ssh_config>`** : 有时你可能需要使用不同的网络来连接到 Linux 系统,或你有一个代理服务器,这种情况下,你可以使用 `-F` 参数使用不同的 `ssh_config` 文件。 - `-F <ssh_config>`有时你可能需要使用不同的网络来连接到 Linux 系统,或你有一个代理服务器,这种情况下,你可以使用 `-F` 参数使用不同的 `ssh_config` <ruby>文件<rt>File</rt></ruby>
- **`-P port`** - P 代表端口。注意,这是大写的 P。默认情况下SSH 使用端口 22。但出于安全原因你可能已经更改了目标主机中的端口号。这种情况下你应该使用 `-P` 参数显示指定新端口号。 - `-P port``P` 代表 <ruby>端口<rt>Port</rt></ruby>。注意,这是大写的 `P`。默认情况下SSH 使用端口 22。但出于安全原因你可能已经更改了目标主机中的端口号。这种情况下你应该使用 `-P` 参数显示指定新端口号。
- **`-p`** : 如果希望保留原始文件的修改时间、访问时间和模式,你需要使用 -p 参数。注意是小写 p。 - `-p`:如果希望 <ruby>保留<rt>Preserve</rt></ruby> 原始文件的修改时间、访问时间和模式,你需要使用 `-p` 参数。注意是小写 `p`
- **`-r`** : 递归复制整个目录。 - `-r`<ruby>递归<rt>Recursively</rt></ruby> 复制整个目录。
- **`-B`** : B 代表批处理模式。它用于在传输文件时选择批处理模式。可以防止询问密码。 - `-B``B` 代表 <ruby>批处理<rt>Batch</rt></ruby> 模式。它用于在传输文件时选择批处理模式。可以防止询问密码。
- **`-S program`** : 用于加密连接的程序名称。 - `-S program`:用于加密连接的 <ruby>程序<rt>Program</rt></ruby> 名称。
- **`-v`** : v 代表详细。当使用 `-v` 参数时,命令将会在终端屏幕上打印进度。你会看到文件传输时到底发生了什么。它在调试连接、身份验证和配置问题时非常有用。 - `-v``v` 代表 <ruby>详细<rt>Verbose</rt></ruby>。当使用 `-v` 参数时,命令将会在终端屏幕上打印进度。你会看到文件传输时到底发生了什么。它在调试连接、身份验证和配置问题时非常有用。
SCP 有很多参数,你可以查看它的手册页来了解其他参数。让我们看一些**有用的 scp 命令示例**。 SCP 有很多参数,你可以查看它的手册页来了解其他参数。让我们看一些**有用的 scp 命令示例**。
@ -122,14 +124,14 @@ SCP 有很多参数,你可以查看它的手册页来了解其他参数。让
- `scp` 命令依赖于 `ssh` 进行安全的文件传输。因此,你必须有一个 **ssh 密钥**或**密码**才能向远程系统进行身份验证。 - `scp` 命令依赖于 `ssh` 进行安全的文件传输。因此,你必须有一个 **ssh 密钥**或**密码**才能向远程系统进行身份验证。
- 为了能传输文件,你必须对**源文件有读权限**,对**目标位置有写权限**。 - 为了能传输文件,你必须对**源文件有读权限**,对**目标位置有写权限**。
- `scp` 命令在写入前不会检查目标位置。目标位置中具有相同名称的任何文件都将被**覆盖而不通知**。 - `scp` 命令在写入前不会检查目标位置。目标位置中具有相同名称的任何文件都将被**覆盖而不通知**。
- 为了能够区分本地和远程位置,使用**冒号**(`:`) - 为了能够区分本地和远程位置,使用**冒号**`:`
- 传输大文件时,建议在 **[Screen][3]** 或 **[Tmux][4]** 会话内启动任务。 - 传输大文件时,建议在 **[Screen][3]** 或 **[Tmux][4]** 会话内启动任务。
### 在 Linux 中使用 SCP 传输文件 ### 在 Linux 中使用 SCP 传输文件
正如我所说,我们可以使用 `scp` 命令将文件或目录从本地复制到远程系统,反之亦然,或者在两台远程系统之间复制文件或目录。 正如我所说,我们可以使用 `scp` 命令将文件或目录从本地复制到远程系统,反之亦然,或者在两台远程系统之间复制文件或目录。
### 1. 使用 SCP 从本地系统复制文件到远程系统 #### 1. 使用 SCP 从本地系统复制文件到远程系统
使用 `scp` 命令将文件从本地复制到远程系统,运行: 使用 `scp` 命令将文件从本地复制到远程系统,运行:
@ -137,7 +139,7 @@ SCP 有很多参数,你可以查看它的手册页来了解其他参数。让
$ scp File1.txt ostechnix@192.168.1.40:/home/ostechnix/ $ scp File1.txt ostechnix@192.168.1.40:/home/ostechnix/
``` ```
**示例输出:** 示例输出:
``` ```
ostechnix@192.168.1.40's password: ostechnix@192.168.1.40's password:
@ -146,10 +148,10 @@ File1.txt 100% 104 814.0KB
让我们分析一下上面的命令,看看每个参数都做了什么。 让我们分析一下上面的命令,看看每个参数都做了什么。
- **`File1.txt`** - 源文件 - `File1.txt` - 源文件
- **`ostechnix`** - 远程系统的用户名 - `ostechnix` - 远程系统的用户名
- **`192.168.1.40`** - 远程系统的 IP 地址 - `192.168.1.40` - 远程系统的 IP 地址
- **`/home/ostechnix/`** - 远程系统中的目标目录。这是我们想要传输源文件的绝对路径,如 `File.txt` - `/home/ostechnix/` - 远程系统中的目标目录。这是我们想要传输源文件的绝对路径,如 `File.txt`
你还可以修改目标文件的名称。下面的命令将 `File1.txt` 传输到目的地,保存为 `myfile.txt` 你还可以修改目标文件的名称。下面的命令将 `File1.txt` 传输到目的地,保存为 `myfile.txt`
@ -159,17 +161,15 @@ $ scp File1.txt ostechnix@192.168.1.40:/home/ostechnix/myfile.txt
![将文件从本地复制到远程系统][5] ![将文件从本地复制到远程系统][5]
将文件从本地复制到远程系统
#### 2. 使用 SCP 从本地系统复制多个文件到远程系统 #### 2. 使用 SCP 从本地系统复制多个文件到远程系统
使用 `scp` 命令将多个文件从本地系统传输到远程系统,运行: 使用 `scp` 命令将多个文件从本地系统传输到远程系统,运行:
```bash ```
$ scp File1.txt File2.txt ostechnix@192.168.1.40:/home/ostechnix/ $ scp File1.txt File2.txt ostechnix@192.168.1.40:/home/ostechnix/
``` ```
**示例输出:** 示例输出:
``` ```
ostechnix@192.168.1.40's password: ostechnix@192.168.1.40's password:
@ -179,13 +179,11 @@ File2.txt 100% 496 6.3MB
![从本地复制多个文件到远程系统][6] ![从本地复制多个文件到远程系统][6]
从本地复制多个文件到远程系统
这里: 这里:
- **`File1.txt`****`File2.txt`** - 源文件名 - `File1.txt``File2.txt` - 源文件名
- **`ostechnix@192.168.1.40`** - 远程系统的用户名和 IP 地址 - `ostechnix@192.168.1.40` - 远程系统的用户名和 IP 地址
- **`/home/ostechnix`** - 目标文件的路径 - `/home/ostechnix` - 目标文件的路径
如果文件具有相同的扩展名,你可以使用以下替代命令来实现相同的目标。 如果文件具有相同的扩展名,你可以使用以下替代命令来实现相同的目标。
@ -201,24 +199,22 @@ $ scp *.txt ostechnix@192.168.1.40:/home/ostechnix/
#### 3. 使用 SCP 从本地到远程系统递归复制目录 #### 3. 使用 SCP 从本地到远程系统递归复制目录
递归地将整个目录(包括子目录及其内容)从本地复制到远程系统,使用 **`-r`** 参数。 递归地将整个目录(包括子目录及其内容)从本地复制到远程系统,使用 `-r` 参数。
```bash ```
$ scp -r Documents/ ostechnix@192.168.1.40:/home/ostechnix/ $ scp -r Documents/ ostechnix@192.168.1.40:/home/ostechnix/
``` ```
![从本地复制目录到远程系统][7] ![从本地复制目录到远程系统][7]
从本地复制目录到远程系统 上述命令将整个 `Documents` 目录包括其内容复制到目标系统。
上述命令将整个 **`Documents`** 目录包括其内容复制到目标系统。
其中, 其中,
- `-r` : 递归复制文件和目录,包括子目录及其内容 - `-r` - 递归复制文件和目录,包括子目录及其内容
- `Documents` : 源目录名称 - `Documents` - 源目录名称
- **`ostechnix@192.168.1.40`** : 远程系统的用户名和 IP 地址 - `ostechnix@192.168.1.40` - 远程系统的用户名和 IP 地址
- **`/home/ostechnix`** : 目标目录的路径 - `/home/ostechnix` - 目标目录的路径
#### 4. 用 SCP 将文件从远程系统传输到本地 #### 4. 用 SCP 将文件从远程系统传输到本地
@ -232,14 +228,12 @@ $ scp ostechnix@192.168.1.40:/home/ostechnix/File1.txt Downloads/
其中 其中
- **`ostechnix@192.168.1.40`** : 远程系统的用户名和 IP 地址 - `ostechnix@192.168.1.40` - 远程系统的用户名和 IP 地址
- `/home/ostechnix/File.txt` : 远程系统文件的绝对路径 - `/home/ostechnix/File.txt` - 远程系统文件的绝对路径
- `Downloads` - 本地保存复制文件的位置 - `Downloads` - 本地保存复制文件的位置
![从远程系统传输文件到本地][8] ![从远程系统传输文件到本地][8]
从远程系统传输文件到本地
#### 5. 使用 SCP 将多个文件从远程系统传输到本地 #### 5. 使用 SCP 将多个文件从远程系统传输到本地
将多个文件从远程系统复制到本地,在**花括号内**注明文件的绝对路径,如下所示: 将多个文件从远程系统复制到本地,在**花括号内**注明文件的绝对路径,如下所示:
@ -250,21 +244,19 @@ $ scp ostechnix@192.168.1.40:/home/ostechnix/\{File1.txt,File2.txt\} Downloads/
![将多个文件从远程系统传输到本地][9] ![将多个文件从远程系统传输到本地][9]
将多个文件从远程系统传输到本地
上述命令将从远程系统的 `/home/ostechnix/` 目录中复制 `File1.txt``File2.txt` 到本地的 `Downloads` 目录中。 上述命令将从远程系统的 `/home/ostechnix/` 目录中复制 `File1.txt``File2.txt` 到本地的 `Downloads` 目录中。
注意,**花括号内的逗号后面没有空格**。 注意,**花括号内的逗号后面没有空格**。
#### 6. 从远程系统递归复制目录到本地 #### 6. 从远程系统递归复制目录到本地
使用 `scp` 从远程系统递归复制整个目录(包括子目录及其内容)到本地系统,使用 **`-r`** 参数。 使用 `scp` 从远程系统递归复制整个目录(包括子目录及其内容)到本地系统,使用 `-r` 参数。
``` ```
$ scp -r ostechnix@192.168.1.40:/home/ostechnix/Documents Downloads/ $ scp -r ostechnix@192.168.1.40:/home/ostechnix/Documents Downloads/
``` ```
上述命令将从远程系统将整个 **`Documents`** 目录复制到本地的 **`Downloads`** 目录。 上述命令将从远程系统将整个 `Documents` 目录复制到本地的 `Downloads` 目录。
#### 7. 使用 SCP 在两台远程计算机之间复制文件 #### 7. 使用 SCP 在两台远程计算机之间复制文件
@ -280,12 +272,12 @@ $ scp senthil@192.168.1.40:/home/senthil/File1.txt kumar@192.168.1.20:/home/kuma
- `senthil@192.168.1.40` - 文件源端远程系统的用户名和 IP 地址 - `senthil@192.168.1.40` - 文件源端远程系统的用户名和 IP 地址
- `/home/senthil/File1.txt` - 复制的文件名及其位置 - `/home/senthil/File1.txt` - 复制的文件名及其位置
- **`kumar@192.168.1.20`** - 复制文件到目标端的用户名和 IP 地址 - `kumar@192.168.1.20` - 复制文件到目标端的用户名和 IP 地址
- `/home/kumar` - 在目标端上保存复制文件的位置 - `/home/kumar` - 在目标端上保存复制文件的位置
上述命令将从远程主机 `192.168.1.40` 复制 `/home/senthil/File1.txt``192.168.1.20` 上的 `/home/kumar/` 目录。 上述命令将从远程主机 `192.168.1.40` 复制 `/home/senthil/File1.txt``192.168.1.20` 上的 `/home/kumar/` 目录。
在这种方法中,数据将直接从一个远程系统传输到另一个远程系统。如果你想通过本地机器路由流量,使用 **`-3`** 参数,如下所示: 在这种方法中,数据将直接从一个远程系统传输到另一个远程系统。如果你想通过本地机器路由流量,使用 `-3` 参数,如下所示:
``` ```
$ scp -3 senthil@192.168.1.40:/home/senthil/File1.txt kumar@192.168.1.20:/home/kumar/ $ scp -3 senthil@192.168.1.40:/home/senthil/File1.txt kumar@192.168.1.20:/home/kumar/
@ -293,7 +285,7 @@ $ scp -3 senthil@192.168.1.40:/home/senthil/File1.txt kumar@192.168.1.20:/home/k
#### 8. 使用 SCP 复制文件时启用压缩 #### 8. 使用 SCP 复制文件时启用压缩
到目前为止,我们在没有压缩的情况下传输了文件。现在我们将使用 **`-C`** 参数在传输文件时启用压缩。 到目前为止,我们在没有压缩的情况下传输了文件。现在我们将使用 `-C` 参数在传输文件时启用压缩。
``` ```
$ scp -C File1.txt ostechnix@192.168.1.40:/home/ostechnix/ $ scp -C File1.txt ostechnix@192.168.1.40:/home/ostechnix/
@ -305,7 +297,7 @@ $ scp -C File1.txt ostechnix@192.168.1.40:/home/ostechnix/
#### 9. 使用 SCP 传输文件时限制带宽 #### 9. 使用 SCP 传输文件时限制带宽
我们可以使用 `-l` 参数限制带宽。注意,最大带宽单位为 Kbits/s。1 字节 = 8 bit。因此如果你想将带宽限制在 200KB/s`-l` 的值将是 **1600**(200*8) 我们可以使用 `-l` 参数限制带宽。注意,最大带宽单位为 Kbits/s。1 Byte = 8 bit。因此如果你想将带宽限制在 200KB/s`-l` 的值将是 **1600**200*8
``` ```
$ scp -l 1600 File1.txt ostechnix@192.168.1.40:/home/ostechnix/ $ scp -l 1600 File1.txt ostechnix@192.168.1.40:/home/ostechnix/
@ -315,7 +307,7 @@ $ scp -l 1600 File1.txt ostechnix@192.168.1.40:/home/ostechnix/
#### 10. 使用 SCP 复制文件时使用不同端口 #### 10. 使用 SCP 复制文件时使用不同端口
作为系统管理员,出于安全原因,你可能在远程服务器上[**更改了 SSH 协议的默认端口**][10]。这种情况下,你可以在传输文件时使用 `-P` 参数指定端口号。注意:**大写的 P** 作为系统管理员,出于安全原因,你可能在远程服务器上 [更改了 SSH 协议的默认端口][10]。这种情况下,你可以在传输文件时使用 `-P` 参数指定端口号。注意:大写的 `P`
``` ```
$ scp -P 2022 File1.txt ostechnix@192.168.1.40:/home/ostechnix/ $ scp -P 2022 File1.txt ostechnix@192.168.1.40:/home/ostechnix/
@ -323,7 +315,7 @@ $ scp -P 2022 File1.txt ostechnix@192.168.1.40:/home/ostechnix/
#### 11. 使用 SCP 复制文件时使用不同的加密方法 #### 11. 使用 SCP 复制文件时使用不同的加密方法
默认情况下SCP 使用 **`AES-128`** 对文件进行加密。如果你想使用不同的加密方法,使用 **`c`** 参数。 默认情况下SCP 使用 `AES-128` 对文件进行加密。如果你想使用不同的加密方法,使用 `c` 参数。
例如,如果你想使用 **3des-cbc** 加密方法,命令如下所示: 例如,如果你想使用 **3des-cbc** 加密方法,命令如下所示:
@ -337,7 +329,7 @@ $ scp -c 3des-cbc File1.txt ostechnix@192.168.1.40:/home/ostechnix/
$ ssh -Q cipher localhost | paste -d, -s - $ ssh -Q cipher localhost | paste -d, -s -
``` ```
**示例输出:** 示例输出:
``` ```
3des-cbc,aes128-cbc,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com 3des-cbc,aes128-cbc,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com
@ -345,7 +337,7 @@ $ ssh -Q cipher localhost | paste -d, -s -
#### 12. 在详细模式下使用 SCP 复制文件 #### 12. 在详细模式下使用 SCP 复制文件
如果你想知道使用 scp 复制文件时幕后发生了什么,你可以使用 **`-v`** 参数。使用详细模式传输文件时,终端上会显示执行 SCP 命令执行的每一步过程。这在故障排除时很方便。 如果你想知道使用 `scp` 复制文件时幕后发生了什么,你可以使用 `-v` 参数。使用详细模式传输文件时,终端上会显示执行 `scp` 命令执行的每一步过程。这在故障排除时很方便。
``` ```
$ scp -v File1.txt ostechnix@192.168.1.40:/home/ostechnix/ $ scp -v File1.txt ostechnix@192.168.1.40:/home/ostechnix/
@ -353,13 +345,11 @@ $ scp -v File1.txt ostechnix@192.168.1.40:/home/ostechnix/
在详细模式下发送文件时,你将看到大量输出,如下所示: 在详细模式下发送文件时,你将看到大量输出,如下所示:
![在 Verbose 模式下使用 SCP 复制文件][11] ![在详细模式下使用 SCP 复制文件][11]
在详细模式下使用 SCP 复制文件
#### 13. 在安静模式下使用 SCP 传输文件 #### 13. 在安静模式下使用 SCP 传输文件
我们可以使用 **`-q`** 参数在安静模式下传输文件。在安静模式下共享文件时,不会在输出中显示进度、警告或诊断信息。 我们可以使用 `-q` 参数在安静模式下传输文件。在安静模式下共享文件时,不会在输出中显示进度、警告或诊断信息。
``` ```
$ scp -q File1.txt ostechnix@192.168.1.40:/home/ostechnix/ $ scp -q File1.txt ostechnix@192.168.1.40:/home/ostechnix/
@ -367,7 +357,7 @@ $ scp -q File1.txt ostechnix@192.168.1.40:/home/ostechnix/
#### 14. 使用 SCP 传输文件时保留文件属性 #### 14. 使用 SCP 传输文件时保留文件属性
使用 **`-p`** 参数可以保留文件修改时间、访问时间和模式等文件属性。注意,这是**小写的 p**。 使用 `-p` 参数可以保留文件修改时间、访问时间和模式等文件属性。注意,这是**小写的 p**。
``` ```
$ scp -p File1.txt ostechnix@192.168.1.40:/home/ostechnix/ $ scp -p File1.txt ostechnix@192.168.1.40:/home/ostechnix/
@ -377,7 +367,7 @@ $ scp -p File1.txt ostechnix@192.168.1.40:/home/ostechnix/
SSH 同时支持基于密码和密钥的身份验证。密钥是 Linux 环境中使用最广泛的身份验证方法。 SSH 同时支持基于密码和密钥的身份验证。密钥是 Linux 环境中使用最广泛的身份验证方法。
如果你想在传输文件时使用基于密钥的身份验证,使用 **`-i`** 参数指定身份文件或私钥。 如果你想在传输文件时使用基于密钥的身份验证,使用 `-i` 参数指定身份文件或私钥。
``` ```
$ scp -i my_private_key.pem File1.txt ostechnix@192.168.1.40:/home/ostechnix/ $ scp -i my_private_key.pem File1.txt ostechnix@192.168.1.40:/home/ostechnix/
@ -385,7 +375,7 @@ $ scp -i my_private_key.pem File1.txt ostechnix@192.168.1.40:/home/ostechnix/
#### 16. 使用不同的 ssh 配置文件 #### 16. 使用不同的 ssh 配置文件
在某些情况下,你需要使用不同的网络来连接到 Linux 系统,或你有一个代理服务器。这在情况下,你可以配合 **`-F`** 参数使用不同的 `ssh_config` 文件。 在某些情况下,你需要使用不同的网络来连接到 Linux 系统,或你有一个代理服务器。这在情况下,你可以配合 `-F` 参数使用不同的 `ssh_config` 文件。
``` ```
$ scp -F /home/ostechnix/my_ssh_config File1.txt ostechnix@192.168.1.40:/home/ostechnix/ $ scp -F /home/ostechnix/my_ssh_config File1.txt ostechnix@192.168.1.40:/home/ostechnix/
@ -393,7 +383,7 @@ $ scp -F /home/ostechnix/my_ssh_config File1.txt ostechnix@192.168.1.40:/home/os
#### 17. 使用 IPv4 或 IPv6 复制文件 #### 17. 使用 IPv4 或 IPv6 复制文件
在复制文件时,我们可以强制 SCP 只使用 IPv4 或 IPv6 地址。IPv4 网络添加 **`-4`** 参数IPv6 网络添加 **`-6`** 参数可以实现这一点。 在复制文件时,我们可以强制 SCP 只使用 IPv4 或 IPv6 地址。IPv4 网络添加 `-4` 参数IPv6 网络添加 `-6` 参数可以实现这一点。
``` ```
$ scp -6 File1.txt ostechnix@192.168.1.40:/home/ostechnix/ $ scp -6 File1.txt ostechnix@192.168.1.40:/home/ostechnix/
@ -403,7 +393,7 @@ $ scp -6 File1.txt ostechnix@192.168.1.40:/home/ostechnix/
#### 问题 1什么是 SCP #### 问题 1什么是 SCP
**回答:** SCP 是一个命令行程序,旨在将文件和目录从本地系统安全地传输到远程系统,反之亦然,或者直接在两个远程系统之间传输。 **回答SCP 是一个命令行程序,旨在将文件和目录从本地系统安全地传输到远程系统,反之亦然,或者直接在两个远程系统之间传输。
#### 问题 2: 如何使用 SCP 将文件从本地复制到远程计算机? #### 问题 2: 如何使用 SCP 将文件从本地复制到远程计算机?
@ -461,7 +451,7 @@ scp *.txt User@RemoteHost:/some/remote/directory
#### 问题 6可以压缩文件吗 #### 问题 6可以压缩文件吗
当然。使用 **`-C`** 压缩文件。文件会在源端压缩,在目标端自动解压缩。 当然。使用 `-C` 压缩文件。文件会在源端压缩,在目标端自动解压缩。
``` ```
scp -C /some/large/file User@RemoteHost:/some/remote/directory scp -C /some/large/file User@RemoteHost:/some/remote/directory
@ -469,7 +459,7 @@ scp -C /some/large/file User@RemoteHost:/some/remote/directory
#### 问题 7可以保留文件属性吗 #### 问题 7可以保留文件属性吗
保留原始文件的修改时间、访问时间和模式等文件属性,使用 **`-p`** 参数。 保留原始文件的修改时间、访问时间和模式等文件属性,使用 `-p` 参数。
``` ```
scp -p file.txt User@RemoteHost:/some/remote/directory scp -p file.txt User@RemoteHost:/some/remote/directory
@ -477,7 +467,7 @@ scp -p file.txt User@RemoteHost:/some/remote/directory
#### 问题 8: 可以使用其他端口吗? #### 问题 8: 可以使用其他端口吗?
当然。SCP 配合 **`-P`** 参数允许你使用其他端口。 当然。SCP 配合 `-P` 参数允许你使用其他端口。
``` ```
scp -P 2022 file.txt User@RemoteHost:/some/remote/directory scp -P 2022 file.txt User@RemoteHost:/some/remote/directory
@ -485,7 +475,7 @@ scp -P 2022 file.txt User@RemoteHost:/some/remote/directory
#### 问题 9: 可以使用不同的加密方法吗? #### 问题 9: 可以使用不同的加密方法吗?
当然。使用 **`-c`** 参数。 当然。使用 `-c` 参数。
``` ```
scp -c 3des-cbc User@RemoteHost:/some/remote/directory scp -c 3des-cbc User@RemoteHost:/some/remote/directory
@ -505,7 +495,7 @@ ssh -Q cipher localhost | paste -d, -s -
#### 问题 12可以从 Windows 系统传输文件到 Linux 吗? #### 问题 12可以从 Windows 系统传输文件到 Linux 吗?
当然。使用 **PSCP** 程序将文件从 windows 传输到 Linux 平台,你也可以使用 **WinSCP** 当然。使用 `PSCP` 程序将文件从 windows 传输到 Linux 平台,你也可以使用 `WinSCP`
### 总结 ### 总结
@ -520,7 +510,7 @@ via: https://ostechnix.com/securely-transfer-files-with-scp-in-linux/
作者:[sk][a] 作者:[sk][a]
选题:[lkxed][b] 选题:[lkxed][b]
译者:[MjSeven](https://github.com/MjSeven) 译者:[MjSeven](https://github.com/MjSeven)
校对:[校对者ID](https://github.com/校对者ID) 校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
@ -537,3 +527,4 @@ via: https://ostechnix.com/securely-transfer-files-with-scp-in-linux/
[9]: https://ostechnix.com/wp-content/uploads/2022/11/Transfer-Multiple-Files-from-Remote-System-to-Local-System.png [9]: https://ostechnix.com/wp-content/uploads/2022/11/Transfer-Multiple-Files-from-Remote-System-to-Local-System.png
[10]: https://ostechnix.com/how-to-change-apache-ftp-and-ssh-default-port-to-a-custom-port-part-3/ [10]: https://ostechnix.com/how-to-change-apache-ftp-and-ssh-default-port-to-a-custom-port-part-3/
[11]: https://ostechnix.com/wp-content/uploads/2022/11/Copying-Files-with-SCP-in-Verbose-Mode.png [11]: https://ostechnix.com/wp-content/uploads/2022/11/Copying-Files-with-SCP-in-Verbose-Mode.png
[0]: https://img.linux.net.cn/data/attachment/album/202212/24/152224vy4glx9x39mtth9b.jpg