>  기사  >  시스템 튜토리얼  >  Linux에서 SCP를 사용하여 파일을 안전하게 전송하는 방법

Linux에서 SCP를 사용하여 파일을 안전하게 전송하는 방법

WBOY
WBOY앞으로
2024-02-14 17:30:171155검색

네트워크를 통한 파일 전송은 다양한 방법과 프로토콜을 통해 수행될 수 있습니다. 원격으로 파일을 복사하는 가장 일반적인 프로토콜은 Rsync, SCP 및 SFTP입니다. 이 기사에서는 SCP가 무엇인지, Linux 및 Unix 계열 운영 체제에서 SCP를 사용하여 로컬 컴퓨터와 원격 컴퓨터 간에 파일을 안전하게 전송하는 방법을 알아봅니다.

SCP란 무엇인가요?

Secure Copy의 약자인 SCP는 Linux 및 Unix 계열 운영 체제에서 안전한 방식으로 로컬과 원격 시스템 간 또는 두 원격 시스템 간에 파일과 디렉터리를 복사하는 명령줄 프로그램입니다.

scp 명령을 사용하면 파일이나 디렉터리를 안전하게 복사할 수 있습니다.

◈ 로컬에서 원격 시스템까지

◈ 원격 시스템에서 로컬로

◈ 두 원격 시스템 사이

scp 명령을 사용하여 데이터를 전송하면 파일과 디렉터리가 암호화됩니다. 따라서 네트워크가 침해되더라도 가해자는 의미 있는 데이터를 얻을 수 없습니다.

SCP는 SSH 프로토콜을 사용하여 파일을 안전하게 전송하는 openSSH 프로그램의 구성 요소입니다. 거의 모든 최신 Linux 및 Unix 배포판에는 OpenSSH가 사전 설치되어 있으므로 굳이 설치할 필요가 없습니다.

알림:

openSSH 개발자의 공식 발표에 따르면:

scp 프로토콜은 오래되었고 유연성이 없으며 수정하기 쉽지 않습니다. 대신 sftprsync과 같은 최신 프로토콜을 사용하는 것이 좋습니다.

참조 - https://lists.mindrot.org/pipermail/openssh-unix-dev/2019-March/037672.html

그러나 대부분의 사용자는 여전히 SCP 프로토콜을 선호합니다. SCP는 동료 SFTP 및 Rsync보다 원격 파일 전송을 더 빠르게 처리하기 때문입니다.

또한 SCP의 작동 원리는 cp 命令完全相同,而 rsync와 다릅니다. 소스 디렉터리에 후행 슬래시가 있는지 여부를 결정하고 다르게 동작합니다. 다음 명령을 살펴보세요:

rsync source destination/ – 将 source 目录复制到 destination폴더 내부.

rsync source/ destination/ – 将 source 目录的内容复制到 destination폴더.

따라서 경로에 슬래시를 추가했는지 다시 확인해야 합니다.

저는 개인적으로 Rsync🔗ostechnix.com을 사용하여 두 호스트 간에 대용량 파일을 복사하고 SCP를 사용하여 네트워크를 통해 개별 파일을 복사합니다.

SCP 명령 구문

SCP의 일반적인 구문은 다음과 같습니다:

으아아아

파일 전송 경로에 따라 구문이 달라집니다. 여기에 구문 형식의 몇 가지 예가 나열되어 있습니다.

로컬에서 원격 시스템으로 파일 복사:

scp  SourceFile User@RemoteHost:RemotePath

类似的,从本地系统复制一个目录到远程系统,使用 -r 参数:

scp -r SourceDirectory User@RemoteHost:RemotePath

复制多个文件到远程系统:

scp  SourceFile1 SourceFile2 User@RemoteHost:RemotePath

远程系统复制文件到本地:

scp  User@RemoteHost:RemoteFilePath DestinationFile

远程系统复制目录到本地:

scp -r User@RemoteHost:RemoteDirectoryPath DestinationDirectory

在本地将文件在两个远程系统之间复制:

scp  User@RemoteHost1:RemoteFile1 User@RemoteHost2:RemotePath

注意,当你在两个远程系统之间复制文件时,流量不会通过本地系统。操作直接在两个远程系统之间进行。但是,你可以使用 -3 参数让流量经过你运行 scp 命令的系统。

从你的本地系统将一个远程系统的目录复制到另一个远程系统:

scp -r User@RemoteHost1:RemoteDirectory User@RemoteHost2:DestinationPath

SCP 命令参数

SCP 命令最常用的参数有:

-C:启用压缩。C 代表 压缩(Compression)。使用此参数时,数据传输速度会更快,因为数据是压缩的。SCP 将自动在源系统上压缩,并在目标系统上解压缩。

-c <cipher></cipher>c 代表 加密(Cipher)。默认情况下,SCP 使用 AES-128 加密方法对数据进行加密。你可以使用 -c 参数更改加密方法。

-i <identity_file></identity_file>i 代表 身份(Identity) 文件或私钥。如你所知,SSH 中使用基于密码或密钥的身份验证。如果希望在传输文件时使用基于密钥的身份验证,可以使用 -i 参数指定身份文件或私钥。

-l limitl 代表 限制(Limit) 带宽。通过此参数,可以设置传输数据的最大带宽。它的单位是 Kbit/s

-F <ssh_config></ssh_config>:有时你可能需要使用不同的网络来连接到 Linux 系统,或你有一个代理服务器,这种情况下,你可以使用 -F 参数使用不同的 ssh_config 文件(File)。

-P portP 代表 端口(Port)。注意,这是大写的 P。默认情况下,SSH 使用端口 22。但出于安全原因,你可能已经更改了目标主机中的端口号。这种情况下,你应该使用 -P 매개변수는 지정된 새 포트 번호를 표시합니다.

-p:如果希望 保留(Preserve) 原始文件的修改时间、访问时间和模式,你需要使用 -p 参数。注意是小写 p.

-r: 전체 디렉토리를 재귀적으로 복사합니다.

-BB는 배치 모드를 나타냅니다. 파일 전송시 배치 모드를 선택하는데 사용됩니다. 비밀번호를 묻는 것을 방지할 수 있습니다.

-S program: 암호화된 연결에 사용되는 프로그램 이름입니다.

-vv 代表 详细(Verbose)。当使用 -v 매개변수, 명령은 진행 상황을 터미널 화면에 인쇄합니다. 파일이 전송되면 어떤 일이 발생하는지 정확히 확인할 수 있습니다. 연결, 인증, 구성 문제를 디버깅할 때 유용합니다.

SCP에는 많은 매개변수가 있습니다. 맨페이지에서 다른 매개변수에 대해 알아볼 수 있습니다. 유용한 scp 명령의 몇 가지 예를 살펴보겠습니다.

시작하기 전에 기억해야 할 중요한 사항

scp 命令依赖于 ssh 안전한 파일 전송을 수행하세요. 따라서 원격 시스템에 인증하려면 ssh key 또는 password가 있어야 합니다.

◈ 파일을 전송하려면 원본 파일에 대한 읽기 권한대상 위치에 대한 쓰기 권한이 있어야 합니다.

scp 이 명령은 쓰기 전에 대상 위치를 확인하지 않습니다. 대상 위치에 있는 이름이 같은 모든 파일은 알림 없이 덮어쓰여집니다 .

◈ 로컬 위치와 원격 위치를 구별하려면 콜론 (:)을 사용하세요.

◈ 대용량 파일을 전송할 때는 Screen🔗 ostechnix.com 또는 Tmux🔗 세션 내에서 작업을 시작하는 것이 좋습니다.

Linux에서 SCP를 사용하여 파일 전송

正如我所说,我们可以使用 scp 命令将文件或目录从本地复制到远程系统,反之亦然,或者在两台远程系统之间复制文件或目录。

\1. 使用 SCP 从本地系统复制文件到远程系统

使用 scp 命令将文件从本地复制到远程系统,运行:

$ scp File1.txt ostechnix@192.168.1.40:/home/ostechnix/

示例输出:

ostechnix@192.168.1.40's password:File1.txt                                                    100%  104   814.0KB/s   00:00

让我们分析一下上面的命令,看看每个参数都做了什么。

File1.txt – 源文件

ostechnix – 远程系统的用户名

192.168.1.40 – 远程系统的 IP 地址

/home/ostechnix/ – 远程系统中的目标目录。这是我们想要传输源文件的绝对路径,如 File.txt

你还可以修改目标文件的名称。下面的命令将 File1.txt 传输到目的地,保存为 myfile.txt

$ scp File1.txt ostechnix@192.168.1.40:/home/ostechnix/myfile.txt
如何在 Linux 中使用 SCP 安全地传输文件

将文件从本地复制到远程系统

\2. 使用 SCP 从本地系统复制多个文件到远程系统

使用 scp 命令将多个文件从本地系统传输到远程系统,运行:

$ scp File1.txt File2.txt ostechnix@192.168.1.40:/home/ostechnix/

示例输出:

ostechnix@192.168.1.40's password:File1.txt                                                    100%  104   689.4KB/s   00:00File2.txt                                                    100%  496     6.3MB/s   00:00

从本地复制多个文件到远程系统

这里:

File1.txtFile2.txt – 源文件名

ostechnix@192.168.1.40 – 远程系统的用户名和 IP 地址

/home/ostechnix – 目标文件的路径

如果文件具有相同的扩展名,你可以使用以下替代命令来实现相同的目标。

$ scp {File1,File2}.txt ostechnix@192.168.1.40:/home/ostechnix/

或者,

$ scp *.txt ostechnix@192.168.1.40:/home/ostechnix/

\3. 使用 SCP 从本地到远程系统递归复制目录

递归地将整个目录(包括子目录及其内容)从本地复制到远程系统,使用 -r 参数。

$ scp -r Documents/ ostechnix@192.168.1.40:/home/ostechnix/
如何在 Linux 中使用 SCP 安全地传输文件

从本地复制目录到远程系统

上述命令将整个 Documents 目录包括其内容复制到目标系统。

其中,

-r – 递归复制文件和目录,包括子目录及其内容

Documents – 源目录名称

ostechnix@192.168.1.40 – 远程系统的用户名和 IP 地址

/home/ostechnix – 目标目录的路径

\4. 用 SCP 将文件从远程系统传输到本地

还记得我们从本地系统复制了 File1.txt 到远程系统,让我们把它复制回本地。

使用 scp 命令从远程系统复制文件到本地,运行:

$ scp ostechnix@192.168.1.40:/home/ostechnix/File1.txt Downloads/

其中

ostechnix@192.168.1.40 – 远程系统的用户名和 IP 地址

/home/ostechnix/File.txt – 远程系统文件的绝对路径

Downloads – 本地保存复制文件的位置

从远程系统传输文件到本地

\5. 使用 SCP 将多个文件从远程系统传输到本地

将多个文件从远程系统复制到本地,在花括号内注明文件的绝对路径,如下所示:

$ scp ostechnix@192.168.1.40:/home/ostechnix/\{File1.txt,File2.txt\} Downloads/

将多个文件从远程系统传输到本地

上述命令将从远程系统的 /home/ostechnix/ 目录中复制 File1.txtFile2.txt 到本地的 Downloads 目录中。

注意,花括号内的逗号后面没有空格。

\6. 从远程系统递归复制目录到本地

使用 scp 从远程系统递归复制整个目录(包括子目录及其内容)到本地系统,使用 -r 参数。

$ scp -r ostechnix@192.168.1.40:/home/ostechnix/Documents Downloads/

上述命令将从远程系统将整个 Documents 目录复制到本地的 Downloads 目录。

\7. 使用 SCP 在两台远程计算机之间复制文件

使用 scp 命令将文件从一个远程系统直接复制到另一个远程系统,运行:

$ scp senthil@192.168.1.40:/home/senthil/File1.txt kumar@192.168.1.20:/home/kumar/

它会要求你输入两个远程系统的密码:

其中,

senthil@192.168.1.40 – 文件源端远程系统的用户名和 IP 地址

/home/senthil/File1.txt – 复制的文件名及其位置

kumar@192.168.1.20 – 复制文件到目标端的用户名和 IP 地址

/home/kumar – 在目标端上保存复制文件的位置

上述命令将从远程主机 192.168.1.40 复制 /home/senthil/File1.txt192.168.1.20 上的 /home/kumar/ 目录。

在这种方法中,数据将直接从一个远程系统传输到另一个远程系统。如果你想通过本地机器路由流量,使用 -3 参数,如下所示:

$ scp -3 senthil@192.168.1.40:/home/senthil/File1.txt kumar@192.168.1.20:/home/kumar/

\8. 使用 SCP 复制文件时启用压缩

到目前为止,我们在没有压缩的情况下传输了文件。现在我们将使用 -C 参数在传输文件时启用压缩。

$ scp -C File1.txt ostechnix@192.168.1.40:/home/ostechnix/

-C 参数将在源端启用压缩,并在目标端自动解压数据。

通过启用压缩,可以显著提高文件复制或传输速度。

\9. 使用 SCP 传输文件时限制带宽

我们可以使用 -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 限制带宽。

\10. 使用 SCP 复制文件时使用不同端口

作为系统管理员,出于安全原因,你可能在远程服务器上 更改了 SSH 协议的默认端口🔗 ostechnix.com。这种情况下,你可以在传输文件时使用 -P 参数指定端口号。注意:大写的 P

$ scp -P 2022 File1.txt ostechnix@192.168.1.40:/home/ostechnix/

\11. 使用 SCP 复制文件时使用不同的加密方法

默认情况下,SCP 使用 AES-128 对文件进行加密。如果你想使用不同的加密方法,使用 c 参数。

例如,如果你想使用 3des-cbc 加密方法,命令如下所示:

$ scp -c 3des-cbc File1.txt ostechnix@192.168.1.40:/home/ostechnix/

要查看支持的密码列表,执行:

$ 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

\12. 在详细模式下使用 SCP 复制文件

如果你想知道使用 scp 复制文件时幕后发生了什么,你可以使用 -v 参数。使用详细模式传输文件时,终端上会显示执行 scp 命令执行的每一步过程。这在故障排除时很方便。

$ scp -v File1.txt ostechnix@192.168.1.40:/home/ostechnix/

在详细模式下发送文件时,你将看到大量输出,如下所示:

如何在 Linux 中使用 SCP 安全地传输文件

在详细模式下使用 SCP 复制文件

\13. 在安静模式下使用 SCP 传输文件

我们可以使用 -q 参数在安静模式下传输文件。在安静模式下共享文件时,不会在输出中显示进度、警告或诊断信息。

$ scp -q File1.txt ostechnix@192.168.1.40:/home/ostechnix/

\14. 使用 SCP 传输文件时保留文件属性

使用 -p 参数可以保留文件修改时间、访问时间和模式等文件属性。注意,这是小写的 p。

$ scp -p File1.txt ostechnix@192.168.1.40:/home/ostechnix/

\15. 使用 SCP 复制文件时使用身份文件

SSH 同时支持基于密码和密钥的身份验证。密钥是 Linux 环境中使用最广泛的身份验证方法。

如果你想在传输文件时使用基于密钥的身份验证,使用 -i 参数指定身份文件或私钥。

$ scp -i my_private_key.pem File1.txt ostechnix@192.168.1.40:/home/ostechnix/

\16. 使用不同的 ssh 配置文件

在某些情况下,你需要使用不同的网络来连接到 Linux 系统,或你有一个代理服务器。这在情况下,你可以配合 -F 参数使用不同的 ssh_config 文件。

$ scp -F /home/ostechnix/my_ssh_config File1.txt ostechnix@192.168.1.40:/home/ostechnix/

\17. 使用 IPv4 或 IPv6 复制文件

在复制文件时,我们可以强制 SCP 只使用 IPv4 或 IPv6 地址。IPv4 网络添加 -4 参数,IPv6 网络添加 -6 参数可以实现这一点。

$ scp -6 File1.txt ostechnix@192.168.1.40:/home/ostechnix/

常见问题

问题 1:什么是 SCP?

SCP 是一个命令行程序,旨在将文件和目录从本地系统安全地传输到远程系统,反之亦然,或者直接在两个远程系统之间传输。

问题 2: 如何使用 SCP 将文件从本地复制到远程计算机?

将文件从本地复制到远程系统,命令如下:

scp SourceFile.txt User@RemoteHost:/some/remote/directory

问题 3:如何递归复制文件和目录?

递归复制包含子目录的目录,使用 -r 参数:

scp -r /some/local/directory User@RemoteHost:/some/remote/directory

问题 4:使用 SCP 可以传输多个文件吗?

当然,只要用空格分隔源文件名即可。

从本地复制多个文件到远程:

scp file1.txt file2.txt file3.txt User@RemoteHost:/some/remote/directoryscp {file1,file2,file3}.txt User@RemoteHost:/some/remote/directoryscp *.txt User@RemoteHost:/some/remote/directory

从远程复制多个文件到本地:

scp User@RemoteHost:/some/remote/directory/\{file1.txt,file2.txt,file3.txt\} /some/local/directory

从一个远程系统复制多个文件到另一个远程系统:

$ scp User@RemoteHost1:/some/remote/directory/\{file1.txt,file2.txt,file3.txt\} User@RemoteHost2:/some/remote/directory/

问题 5:如何传输目录下的所有文件?

传输整个目录,首先进入该目录:

cd dir_name

然后,

scp *.txt User@RemoteHost:/some/remote/directory

问题 6:可以压缩文件吗?

当然。使用 -C 压缩文件。文件会在源端压缩,在目标端自动解压缩。

scp -C /some/large/file User@RemoteHost:/some/remote/directory

问题 7:可以保留文件属性吗?

保留原始文件的修改时间、访问时间和模式等文件属性,使用 -p 参数。

scp -p file.txt User@RemoteHost:/some/remote/directory

问题 8: 可以使用其他端口吗?

当然。SCP 配合 -P 参数允许你使用其他端口。

scp -P 2022 file.txt User@RemoteHost:/some/remote/directory

问题 9: 可以使用不同的加密方法吗?

当然。使用 -c 参数。

scp -c 3des-cbc User@RemoteHost:/some/remote/directory

问题 10: 如何列出 SSH 支持的加密方法?

使用以下命令查看 SSH 和 SCP 支持的加密方法列表:

ssh -Q cipher localhost | paste -d, -s -

问题 11:SCP 真的安全吗?

当然,它用起来是完全安全的。SCP 和 openSSH 使用相同的 SSH 机制。传输的数据在源端加密,目标端解密。

问题 12:可以从 Windows 系统传输文件到 Linux 吗?

当然。使用 PSCP 程序将文件从 windows 传输到 Linux 平台,你也可以使用 WinSCP

总结

在这篇全面指南中,我们了解了什么是 SCP,以及如何在 Linux 中使用 SCP 安全地传输文件,其中包括 17 个 SCP 命令示例,另外还回答了关于 SCP 的常见问题。

无论你是 Linux 管理人员、开发人员还是普通用户,你都会面临某个时候将文件复制到远程系统或从远程系统复制文件的情况,知道如何使用 SCP 安全地复制文件将是非常有用的。

위 내용은 Linux에서 SCP를 사용하여 파일을 안전하게 전송하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 lxlinux.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제