mirror of
https://github.com/LCTT/TranslateProject.git
synced 2024-12-26 21:30:55 +08:00
parent
11e4c251e9
commit
33badf1572
@ -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
|
Loading…
Reference in New Issue
Block a user