在網(wǎng)絡(luò)上文件傳輸可以通過(guò)各種不同的方式和協(xié)議來(lái)完成。遠(yuǎn)程復(fù)制文件最常用的協(xié)議是Rsync、SCP和SFTP。在本文中,我們將了解什么是 SCP以及如何在 Linux 和類(lèi) Unix 操作系統(tǒng)中使用 SCP 在本地和遠(yuǎn)程計(jì)算機(jī)之間安全地傳輸文件。
什么是 SCP?
SCP,代表安全復(fù)制(Secure Copy),它是一個(gè)命令行程序,在 Linux 和類(lèi) Unix 操作系統(tǒng)中以安全的方式在本地和遠(yuǎn)程系統(tǒng)之間,或在兩個(gè)遠(yuǎn)程系統(tǒng)之間復(fù)制文件和目錄。
使用scp命令,你可以安全地復(fù)制文件或目錄:
?從本地到遠(yuǎn)程系統(tǒng)
?從遠(yuǎn)程系統(tǒng)到本地
?在兩個(gè)遠(yuǎn)程系統(tǒng)之間
使用scp命令傳輸數(shù)據(jù)時(shí),文件和目錄都是加密的。因此,即使網(wǎng)絡(luò)被破壞,作惡者也無(wú)法獲得任何有意義的數(shù)據(jù)。
SCP 是 openSSH 程序的一個(gè)組件,它使用 SSH 協(xié)議安全地傳輸文件。幾乎所有現(xiàn)代 Linux 和 Unix 發(fā)行版都預(yù)裝了 OpenSSH,所以不必費(fèi)心安裝它。
提醒一句:
根據(jù) openSSH 開(kāi)發(fā)人員的官方公告:
scp 協(xié)議已經(jīng)過(guò)時(shí)了,它不靈活且不易修復(fù)。我們建議使用更現(xiàn)代的協(xié)議,如sftp和rsync來(lái)代替。
但是,大多數(shù)用戶仍然更喜歡 SCP 協(xié)議。因?yàn)椋琒CP 處理遠(yuǎn)程文件傳輸比同行 SFTP 和 Rsync 更快。
另外,SCP 的工作原理與cp命令完全相同,而rsync則會(huì)判斷源目錄是否有結(jié)尾斜杠而出現(xiàn)不同的行為。看一看下面的命令:
?rsync source destination/- 將source目錄復(fù)制到destination文件夾內(nèi)。
?rsync source/ destination/- 將source目錄的內(nèi)容復(fù)制到destination文件夾中。
所以,你必須反復(fù)檢查是否在路徑中添加了斜杠。
我個(gè)人使用Rsync ostechnix.com在兩臺(tái)主機(jī)之間復(fù)制大文件,使用 SCP 在網(wǎng)絡(luò)上復(fù)制單個(gè)文件。
SCP 命令語(yǔ)法
SCP 的通用語(yǔ)法如下:
scp [-346ABCpqrTv] [-c cipher] [-F ssh_config] [-i identity_file] [-J destination] [-l limit] [-o ssh_option] [-P port] [-S program] source ... target
根據(jù)文件傳輸路徑的不同,語(yǔ)法也會(huì)有所不同。這里我羅列了一些語(yǔ)法格式示例。
從本地復(fù)制一個(gè)文件到遠(yuǎn)程系統(tǒng):
scp
類(lèi)似的,從本地系統(tǒng)復(fù)制一個(gè)目錄到遠(yuǎn)程系統(tǒng),使用-r參數(shù):
scp -r SourceDirectory User@RemoteHost:RemotePath
復(fù)制多個(gè)文件到遠(yuǎn)程系統(tǒng):
scp
遠(yuǎn)程系統(tǒng)復(fù)制文件到本地:
scp
遠(yuǎn)程系統(tǒng)復(fù)制目錄到本地:
scp -r User@RemoteHost:RemoteDirectoryPath DestinationDirectory
在本地將文件在兩個(gè)遠(yuǎn)程系統(tǒng)之間復(fù)制:
scp
注意,當(dāng)你在兩個(gè)遠(yuǎn)程系統(tǒng)之間復(fù)制文件時(shí),流量不會(huì)通過(guò)本地系統(tǒng)。操作直接在兩個(gè)遠(yuǎn)程系統(tǒng)之間進(jìn)行。但是,你可以使用-3參數(shù)讓流量經(jīng)過(guò)你運(yùn)行scp命令的系統(tǒng)。
從你的本地系統(tǒng)將一個(gè)遠(yuǎn)程系統(tǒng)的目錄復(fù)制到另一個(gè)遠(yuǎn)程系統(tǒng):
scp -r User@RemoteHost1:RemoteDirectory User@RemoteHost2:DestinationPath
SCP 命令參數(shù)
SCP 命令最常用的參數(shù)有:
SCP 有很多參數(shù),你可以查看它的手冊(cè)頁(yè)來(lái)了解其他參數(shù)。讓我們看一些有用的 scp 命令示例。
開(kāi)始前要記住的重要事項(xiàng)
在 Linux 中使用 SCP 傳輸文件
正如我所說(shuō),我們可以使用scp命令將文件或目錄從本地復(fù)制到遠(yuǎn)程系統(tǒng),反之亦然,或者在兩臺(tái)遠(yuǎn)程系統(tǒng)之間復(fù)制文件或目錄。
1. 使用 SCP 從本地系統(tǒng)復(fù)制文件到遠(yuǎn)程系統(tǒng)
使用scp命令將文件從本地復(fù)制到遠(yuǎn)程系統(tǒng),運(yùn)行:
$ 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
讓我們分析一下上面的命令,看看每個(gè)參數(shù)都做了什么。
?File1.txt- 源文件
?ostechnix- 遠(yuǎn)程系統(tǒng)的用戶名
?192.168.1.40- 遠(yuǎn)程系統(tǒng)的 IP 地址
?/home/ostechnix/- 遠(yuǎn)程系統(tǒng)中的目標(biāo)目錄。
這是我們想要傳輸源文件的絕對(duì)路徑,如File.txt。
你還可以修改目標(biāo)文件的名稱(chēng)。下面的命令將File1.txt傳輸?shù)侥康牡兀4鏋閙yfile.txt。
$ scp File1.txt ostechnix@192.168.1.40:/home/ostechnix/myfile.txt
將文件從本地復(fù)制到遠(yuǎn)程系統(tǒng)
2. 使用 SCP 從本地系統(tǒng)復(fù)制多個(gè)文件到遠(yuǎn)程系統(tǒng)
使用scp命令將多個(gè)文件從本地系統(tǒng)傳輸?shù)竭h(yuǎn)程系統(tǒng),運(yùn)行:
$ 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:00
File2.txt 100% 496 6.3MB/s 00:00
從本地復(fù)制多個(gè)文件到遠(yuǎn)程系統(tǒng)
這里:
?File1.txt和File2.txt- 源文件名
?ostechnix@192.168.1.40- 遠(yuǎn)程系統(tǒng)的用戶名和 IP 地址
?/home/ostechnix- 目標(biāo)文件的路徑
如果文件具有相同的擴(kuò)展名,你可以使用以下替代命令來(lái)實(shí)現(xiàn)相同的目標(biāo)。
$ scp {File1,File2}.txt ostechnix@192.168.1.40:/home/ostechnix/
或者,
$ scp *.txt ostechnix@192.168.1.40:/home/ostechnix/
3. 使用 SCP 從本地到遠(yuǎn)程系統(tǒng)遞歸復(fù)制目錄
遞歸地將整個(gè)目錄(包括子目錄及其內(nèi)容)從本地復(fù)制到遠(yuǎn)程系統(tǒng),使用-r參數(shù)。
$ scp -r Documents/ ostechnix@192.168.1.40:/home/ostechnix/
從本地復(fù)制目錄到遠(yuǎn)程系統(tǒng)
上述命令將整個(gè)Documents目錄包括其內(nèi)容復(fù)制到目標(biāo)系統(tǒng)。
其中,
4. 用 SCP 將文件從遠(yuǎn)程系統(tǒng)傳輸?shù)奖镜?/p>
還記得我們從本地系統(tǒng)復(fù)制了File1.txt到遠(yuǎn)程系統(tǒng),讓我們把它復(fù)制回本地。
使用scp命令從遠(yuǎn)程系統(tǒng)復(fù)制文件到本地,運(yùn)行:
$ scp ostechnix@192.168.1.40:/home/ostechnix/File1.txt Downloads/
其中
從遠(yuǎn)程系統(tǒng)傳輸文件到本地
5. 使用 SCP 將多個(gè)文件從遠(yuǎn)程系統(tǒng)傳輸?shù)奖镜?/p>
將多個(gè)文件從遠(yuǎn)程系統(tǒng)復(fù)制到本地,在花括號(hào)內(nèi)注明文件的絕對(duì)路徑,如下所示:
$ scp ostechnix@192.168.1.40:/home/ostechnix/{File1.txt,File2.txt} Downloads/
將多個(gè)文件從遠(yuǎn)程系統(tǒng)傳輸?shù)奖镜?/p>
上述命令將從遠(yuǎn)程系統(tǒng)的/home/ostechnix/目錄中復(fù)制File1.txt和File2.txt到本地的Downloads目錄中。
注意,花括號(hào)內(nèi)的逗號(hào)后面沒(méi)有空格。
6. 從遠(yuǎn)程系統(tǒng)遞歸復(fù)制目錄到本地
使用scp從遠(yuǎn)程系統(tǒng)遞歸復(fù)制整個(gè)目錄(包括子目錄及其內(nèi)容)到本地系統(tǒng),使用-r參數(shù)。
$ scp -r ostechnix@192.168.1.40:/home/ostechnix/Documents Downloads/
上述命令將從遠(yuǎn)程系統(tǒng)將整個(gè)Documents目錄復(fù)制到本地的Downloads目錄。
7. 使用 SCP 在兩臺(tái)遠(yuǎn)程計(jì)算機(jī)之間復(fù)制文件
使用scp命令將文件從一個(gè)遠(yuǎn)程系統(tǒng)直接復(fù)制到另一個(gè)遠(yuǎn)程系統(tǒng),運(yùn)行:
$ scp senthil@192.168.1.40:/home/senthil/File1.txt kumar@192.168.1.20:/home/kumar/
它會(huì)要求你輸入兩個(gè)遠(yuǎn)程系統(tǒng)的密碼:
其中,
上述命令將從遠(yuǎn)程主機(jī)192.168.1.40復(fù)制/home/senthil/File1.txt到192.168.1.20上的/home/kumar/目錄。
在這種方法中,數(shù)據(jù)將直接從一個(gè)遠(yuǎn)程系統(tǒng)傳輸?shù)搅硪粋€(gè)遠(yuǎn)程系統(tǒng)。如果你想通過(guò)本地機(jī)器路由流量,使用-3參數(shù),如下所示:
$ scp -3 senthil@192.168.1.40:/home/senthil/File1.txt kumar@192.168.1.20:/home/kumar/
8. 使用 SCP 復(fù)制文件時(shí)啟用壓縮
到目前為止,我們?cè)跊](méi)有壓縮的情況下傳輸了文件。現(xiàn)在我們將使用-C參數(shù)在傳輸文件時(shí)啟用壓縮。
$ scp -C File1.txt ostechnix@192.168.1.40:/home/ostechnix/
-C參數(shù)將在源端啟用壓縮,并在目標(biāo)端自動(dòng)解壓數(shù)據(jù)。
通過(guò)啟用壓縮,可以顯著提高文件復(fù)制或傳輸速度。
9. 使用 SCP 傳輸文件時(shí)限制帶寬
我們可以使用-l參數(shù)限制帶寬。注意,最大帶寬單位為 Kbits/s。1 Byte = 8 bit。因此,如果你想將帶寬限制在 200KB/s,-l的值將是1600(200*8)。
$ scp -l 1600 File1.txt ostechnix@192.168.1.40:/home/ostechnix/
這在傳輸大文件時(shí)非常有用,可以防止 SCP 限制帶寬。
10. 使用 SCP 復(fù)制文件時(shí)使用不同端口
作為系統(tǒng)管理員,出于安全原因,你可能在遠(yuǎn)程服務(wù)器上更改了 SSH 協(xié)議的默認(rèn)端口 ostechnix.com。這種情況下,你可以在傳輸文件時(shí)使用-P參數(shù)指定端口號(hào)。注意:大寫(xiě)的P。
$ scp -P 2022 File1.txt ostechnix@192.168.1.40:/home/ostechnix/
11. 使用 SCP 復(fù)制文件時(shí)使用不同的加密方法
默認(rèn)情況下,SCP 使用AES-128對(duì)文件進(jìn)行加密。如果你想使用不同的加密方法,使用c參數(shù)。
例如,如果你想使用3des-cbc加密方法,命令如下所示:
$ scp -c 3des-cbc File1.txt ostechnix@192.168.1.40:/home/ostechnix/
要查看支持的密碼列表,執(zhí)行:
$ 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. 在詳細(xì)模式下使用 SCP 復(fù)制文件
如果你想知道使用scp復(fù)制文件時(shí)幕后發(fā)生了什么,你可以使用-v參數(shù)。使用詳細(xì)模式傳輸文件時(shí),終端上會(huì)顯示執(zhí)行scp命令執(zhí)行的每一步過(guò)程。這在故障排除時(shí)很方便。
$ scp -v File1.txt ostechnix@192.168.1.40:/home/ostechnix/
在詳細(xì)模式下發(fā)送文件時(shí),你將看到大量輸出,如下所示:
在詳細(xì)模式下使用 SCP 復(fù)制文件
13. 在安靜模式下使用 SCP 傳輸文件
我們可以使用-q參數(shù)在安靜模式下傳輸文件。在安靜模式下共享文件時(shí),不會(huì)在輸出中顯示進(jìn)度、警告或診斷信息。
$ scp -q File1.txt ostechnix@192.168.1.40:/home/ostechnix/
14. 使用 SCP 傳輸文件時(shí)保留文件屬性
使用-p參數(shù)可以保留文件修改時(shí)間、訪問(wèn)時(shí)間和模式等文件屬性。注意,這是小寫(xiě)的 p。
$ scp -p File1.txt ostechnix@192.168.1.40:/home/ostechnix/
15. 使用 SCP 復(fù)制文件時(shí)使用身份文件
SSH 同時(shí)支持基于密碼和密鑰的身份驗(yàn)證。密鑰是 Linux 環(huán)境中使用最廣泛的身份驗(yàn)證方法。
如果你想在傳輸文件時(shí)使用基于密鑰的身份驗(yàn)證,使用-i參數(shù)指定身份文件或私鑰。
$ scp -i my_private_key.pem File1.txt ostechnix@192.168.1.40:/home/ostechnix/
16. 使用不同的 ssh 配置文件
在某些情況下,你需要使用不同的網(wǎng)絡(luò)來(lái)連接到 Linux 系統(tǒng),或你有一個(gè)代理服務(wù)器。這在情況下,你可以配合-F參數(shù)使用不同的ssh_config文件。
$ scp -F /home/ostechnix/my_ssh_config File1.txt ostechnix@192.168.1.40:/home/ostechnix/
17. 使用 IPv4 或 IPv6 復(fù)制文件
在復(fù)制文件時(shí),我們可以強(qiáng)制 SCP 只使用 IPv4 或 IPv6 地址。IPv4 網(wǎng)絡(luò)添加-4參數(shù),IPv6 網(wǎng)絡(luò)添加-6參數(shù)可以實(shí)現(xiàn)這一點(diǎn)。
$ scp -6 File1.txt ostechnix@192.168.1.40:/home/ostechnix/
常見(jiàn)問(wèn)題
問(wèn)題 1:什么是 SCP?
SCP 是一個(gè)命令行程序,旨在將文件和目錄從本地系統(tǒng)安全地傳輸?shù)竭h(yuǎn)程系統(tǒng),反之亦然,或者直接在兩個(gè)遠(yuǎn)程系統(tǒng)之間傳輸。
問(wèn)題 2: 如何使用 SCP 將文件從本地復(fù)制到遠(yuǎn)程計(jì)算機(jī)?
將文件從本地復(fù)制到遠(yuǎn)程系統(tǒng),命令如下:
scp SourceFile.txt User@RemoteHost:/some/remote/directory
問(wèn)題 3:如何遞歸復(fù)制文件和目錄?
遞歸復(fù)制包含子目錄的目錄,使用-r參數(shù):
scp -r /some/local/directory User@RemoteHost:/some/remote/directory
問(wèn)題 4:使用 SCP 可以傳輸多個(gè)文件嗎?
當(dāng)然,只要用空格分隔源文件名即可。
從本地復(fù)制多個(gè)文件到遠(yuǎn)程:
scp file1.txt file2.txt file3.txt User@RemoteHost:/some/remote/directory
scp {file1,file2,file3}.txt User@RemoteHost:/some/remote/directory
scp *.txt User@RemoteHost:/some/remote/directory
從遠(yuǎn)程復(fù)制多個(gè)文件到本地:
scp User@RemoteHost:/some/remote/directory/{file1.txt,file2.txt,file3.txt} /some/local/directory
從一個(gè)遠(yuǎn)程系統(tǒng)復(fù)制多個(gè)文件到另一個(gè)遠(yuǎn)程系統(tǒng):
$ scp User@RemoteHost1:/some/remote/directory/{file1.txt,file2.txt,file3.txt} User@RemoteHost2:/some/remote/directory/
問(wèn)題 5:如何傳輸目錄下的所有文件?
傳輸整個(gè)目錄,首先進(jìn)入該目錄:
cd dir_name
然后,
scp *.txt User@RemoteHost:/some/remote/directory
問(wèn)題 6:可以壓縮文件嗎?
當(dāng)然。使用-C壓縮文件。文件會(huì)在源端壓縮,在目標(biāo)端自動(dòng)解壓縮。
scp -C /some/large/file User@RemoteHost:/some/remote/directory
問(wèn)題 7:可以保留文件屬性嗎?
保留原始文件的修改時(shí)間、訪問(wèn)時(shí)間和模式等文件屬性,使用-p參數(shù)。
scp -p file.txt User@RemoteHost:/some/remote/directory
問(wèn)題 8: 可以使用其他端口嗎?
當(dāng)然。SCP 配合-P參數(shù)允許你使用其他端口。
scp -P 2022 file.txt User@RemoteHost:/some/remote/directory
問(wèn)題 9: 可以使用不同的加密方法嗎?
當(dāng)然。使用-c參數(shù)。
scp -c 3des-cbc User@RemoteHost:/some/remote/directory
問(wèn)題 10: 如何列出 SSH 支持的加密方法?
使用以下命令查看 SSH 和 SCP 支持的加密方法列表:
ssh -Q cipher localhost | paste -d, -s -
問(wèn)題 11:SCP 真的安全嗎?
當(dāng)然,它用起來(lái)是完全安全的。SCP 和 openSSH 使用相同的 SSH 機(jī)制。傳輸?shù)臄?shù)據(jù)在源端加密,目標(biāo)端解密。
問(wèn)題 12:可以從 Windows 系統(tǒng)傳輸文件到 Linux 嗎?
當(dāng)然。使用PSCP程序?qū)⑽募?windows 傳輸?shù)?Linux 平臺(tái),你也可以使用WinSCP。
總結(jié)
在這篇全面指南中,我們了解了什么是 SCP,以及如何在 Linux 中使用SCP 安全地傳輸文件,其中包括17 個(gè) SCP 命令示例,另外還回答了關(guān)于 SCP 的常見(jiàn)問(wèn)題。
無(wú)論你是 Linux 管理人員、開(kāi)發(fā)人員還是普通用戶,你都會(huì)面臨某個(gè)時(shí)候?qū)⑽募?fù)制到遠(yuǎn)程系統(tǒng)或從遠(yuǎn)程系統(tǒng)復(fù)制文件的情況,知道如何使用 SCP 安全地復(fù)制文件將是非常有用的。
審核編輯:劉清
-
Linux
+關(guān)注
關(guān)注
87文章
11292瀏覽量
209332 -
UNIX操作系統(tǒng)
+關(guān)注
關(guān)注
0文章
13瀏覽量
15304 -
SSH
+關(guān)注
關(guān)注
0文章
188瀏覽量
16335 -
SCP
+關(guān)注
關(guān)注
0文章
29瀏覽量
9243
原文標(biāo)題:如何在 Linux 中使用 SCP 安全地傳輸文件
文章出處:【微信號(hào):良許Linux,微信公眾號(hào):良許Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論