네트워크를 통한 파일 전송은 다양한 방법과 프로토콜을 통해 수행될 수 있습니다. 원격으로 파일을 복사하는 가장 일반적인 프로토콜은 Rsync, SCP 및 SFTP입니다. 이 기사에서는 SCP가 무엇인지, Linux 및 Unix 계열 운영 체제에서 SCP를 사용하여 로컬 컴퓨터와 원격 컴퓨터 간에 파일을 안전하게 전송하는 방법을 알아봅니다.
SCP란 무엇인가요?
Secure Copy의 약자인 SCP는 Linux 및 Unix 계열 운영 체제에서 안전한 방식으로 로컬과 원격 시스템 간 또는 두 원격 시스템 간에 파일과 디렉터리를 복사하는 명령줄 프로그램입니다.
scp
명령을 사용하면 파일이나 디렉터리를 안전하게 복사할 수 있습니다.
◈ 로컬에서 원격 시스템까지
◈ 원격 시스템에서 로컬로
◈ 두 원격 시스템 사이
scp
명령을 사용하여 데이터를 전송하면 파일과 디렉터리가 암호화됩니다. 따라서 네트워크가 침해되더라도 가해자는 의미 있는 데이터를 얻을 수 없습니다.
SCP는 SSH 프로토콜을 사용하여 파일을 안전하게 전송하는 openSSH 프로그램의 구성 요소입니다. 거의 모든 최신 Linux 및 Unix 배포판에는 OpenSSH가 사전 설치되어 있으므로 굳이 설치할 필요가 없습니다.
알림:
openSSH 개발자의 공식 발표에 따르면:
“
scp 프로토콜은 오래되었고 유연성이 없으며 수정하기 쉽지 않습니다. 대신
sftp
和rsync
과 같은 최신 프로토콜을 사용하는 것이 좋습니다.참조 - 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 limit
:l
代表 限制(Limit) 带宽。通过此参数,可以设置传输数据的最大带宽。它的单位是 Kbit/s
。
◈ -F <ssh_config></ssh_config>
:有时你可能需要使用不同的网络来连接到 Linux 系统,或你有一个代理服务器,这种情况下,你可以使用 -F
参数使用不同的 ssh_config
文件(File)。
◈ -P port
:P
代表 端口(Port)。注意,这是大写的 P
。默认情况下,SSH 使用端口 22。但出于安全原因,你可能已经更改了目标主机中的端口号。这种情况下,你应该使用 -P
매개변수는 지정된 새 포트 번호를 표시합니다.
◈ -p
:如果希望 保留(Preserve) 原始文件的修改时间、访问时间和模式,你需要使用 -p
参数。注意是小写 p
.
◈ -r
: 전체 디렉토리를 재귀적으로 복사합니다.
◈ -B
:B
는 배치 모드를 나타냅니다. 파일 전송시 배치 모드를 선택하는데 사용됩니다. 비밀번호를 묻는 것을 방지할 수 있습니다.
◈ -S program
: 암호화된 연결에 사용되는 프로그램 이름입니다.
◈ -v
:v
代表 详细(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
将文件从本地复制到远程系统
\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.txt
和 File2.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/
从本地复制目录到远程系统
上述命令将整个 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.txt
和 File2.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.txt
到 192.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/
在详细模式下发送文件时,你将看到大量输出,如下所示:
在详细模式下使用 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!