如何在 Linux 中使用 SCP 安全地傳輸文件
在網(wǎng)絡上文件傳輸可以通過各種不同的方式和協(xié)議來完成。遠程復制文件最常用的協(xié)議是 Rsync、SCP 和 SFTP。在本文中,我們將了解什么是 SCP 以及如何在 Linux 和類 Unix 操作系統(tǒng)中使用 SCP 在本地和遠程計算機之間安全地傳輸文件。
什么是 SCP?
SCP,代表 安全復制Secure Copy,它是一個命令行程序,在 Linux 和類 Unix 操作系統(tǒng)中以安全的方式在本地和遠程系統(tǒng)之間,或在兩個遠程系統(tǒng)之間復制文件和目錄。
使用 ??scp?
? 命令,你可以安全地復制文件或目錄:
- 從本地到遠程系統(tǒng)
- 從遠程系統(tǒng)到本地
- 在兩個遠程系統(tǒng)之間
使用 ??scp?
? 命令傳輸數(shù)據(jù)時,文件和目錄都是加密的。因此,即使網(wǎng)絡被破壞,作惡者也無法獲得任何有意義的數(shù)據(jù)。
SCP 是 openSSH 程序的一個組件,它使用 SSH 協(xié)議安全地傳輸文件。幾乎所有現(xiàn)代 Linux 和 Unix 發(fā)行版都預裝了 OpenSSH,所以不必費心安裝它。
提醒一句:
根據(jù) openSSH 開發(fā)人員的官方公告:
scp 協(xié)議已經(jīng)過時了,它不靈活且不易修復。我們建議使用更現(xiàn)代的協(xié)議,如 ?
?sftp?
? 和 ??rsync?
? 來代替。參考 - ??https://lists.mindrot.org/pipermail/openssh-unix-dev/2019-March/037672.html??
但是,大多數(shù)用戶仍然更喜歡 SCP 協(xié)議。因為,SCP 處理遠程文件傳輸比同行 SFTP 和 Rsync 更快。
另外,SCP 的工作原理與 ??cp?
? 命令完全相同,而 ??rsync?
? 則會判斷源目錄是否有結(jié)尾斜杠而出現(xiàn)不同的行為??匆豢聪旅娴拿睿?/p>
- ?
?rsync source destination/?
? - 將??source?
? 目錄復制到??destination?
? 文件夾內(nèi)。 - ?
?rsync source/ destination/?
? - 將??source?
? 目錄的內(nèi)容復制到??destination?
? 文件夾中。
所以,你必須反復檢查是否在路徑中添加了斜杠。
我個人使用 ??Rsync??
SCP 命令語法
SCP 的通用語法如下:
根據(jù)文件傳輸路徑的不同,語法也會有所不同。這里我羅列了一些語法格式示例。
從本地復制一個文件到遠程系統(tǒng):
類似的,從本地系統(tǒng)復制一個目錄到遠程系統(tǒng),使用 ??-r?
? 參數(shù):
復制多個文件到遠程系統(tǒng):
遠程系統(tǒng)復制文件到本地:
遠程系統(tǒng)復制目錄到本地:
在本地將文件在兩個遠程系統(tǒng)之間復制:
注意,當你在兩個遠程系統(tǒng)之間復制文件時,流量不會通過本地系統(tǒng)。操作直接在兩個遠程系統(tǒng)之間進行。但是,你可以使用 ??-3?
? 參數(shù)讓流量經(jīng)過你運行 ??scp?
? 命令的系統(tǒng)。
從你的本地系統(tǒng)將一個遠程系統(tǒng)的目錄復制到另一個遠程系統(tǒng):
SCP 命令參數(shù)
SCP 命令最常用的參數(shù)有:
- ?
?-C?
?:啟用壓縮。??C?
? 代表 壓縮Compression。使用此參數(shù)時,數(shù)據(jù)傳輸速度會更快,因為數(shù)據(jù)是壓縮的。SCP 將自動在源系統(tǒng)上壓縮,并在目標系統(tǒng)上解壓縮。 - ?
?-c <cipher>?
?:??c?
? 代表 加密Cipher。默認情況下,SCP 使用AES-128加密方法對數(shù)據(jù)進行加密。你可以使用??-c?
? 參數(shù)更改加密方法。 - ?
?-i <identity_file>?
?:??i?
? 代表 身份Identity 文件或私鑰。如你所知,SSH 中使用基于密碼或密鑰的身份驗證。如果希望在傳輸文件時使用基于密鑰的身份驗證,可以使用??-i?
? 參數(shù)指定身份文件或私鑰。 - ?
?-l limit?
?:??l?
? 代表 限制Limit 帶寬。通過此參數(shù),可以設(shè)置傳輸數(shù)據(jù)的最大帶寬。它的單位是??Kbit/s?
?。 - ?
?-F <ssh_config>?
?:有時你可能需要使用不同的網(wǎng)絡來連接到 Linux 系統(tǒng),或你有一個代理服務器,這種情況下,你可以使用??-F?
? 參數(shù)使用不同的??ssh_config?
? 文件File。 - ?
?-P port?
?:??P?
? 代表 端口Port。注意,這是大寫的??P?
?。默認情況下,SSH 使用端口 22。但出于安全原因,你可能已經(jīng)更改了目標主機中的端口號。這種情況下,你應該使用??-P?
? 參數(shù)顯示指定新端口號。 - ?
?-p?
?:如果希望 保留Preserve 原始文件的修改時間、訪問時間和模式,你需要使用??-p?
? 參數(shù)。注意是小寫??p?
?。 - ?
?-r?
?:遞歸Recursively - ?
?-B?
?:??B?
? 代表 批處理Batch - ?
?-S program?
?:用于加密連接的 程序Program - ?
?-v?
?:??v?
? 代表 詳細Verbose。當使用??-v?
? 參數(shù)時,命令將會在終端屏幕上打印進度。你會看到文件傳輸時到底發(fā)生了什么。它在調(diào)試連接、身份驗證和配置問題時非常有用。
SCP 有很多參數(shù),你可以查看它的手冊頁來了解其他參數(shù)。讓我們看一些有用的 scp 命令示例。
開始前要記住的重要事項
- ?
?scp?
? 命令依賴于??ssh?
? 進行安全的文件傳輸。因此,你必須有一個ssh 密鑰或密碼才能向遠程系統(tǒng)進行身份驗證。 - 為了能傳輸文件,你必須對源文件有讀權(quán)限,對目標位置有寫權(quán)限。
- ?
?scp?
? 命令在寫入前不會檢查目標位置。目標位置中具有相同名稱的任何文件都將被覆蓋而不通知。 - 為了能夠區(qū)分本地和遠程位置,使用冒號(?
?:?
?)。 - 傳輸大文件時,建議在 ??Screen??? 或 ??Tmux??
在 Linux 中使用 SCP 傳輸文件
正如我所說,我們可以使用 ??scp?
? 命令將文件或目錄從本地復制到遠程系統(tǒng),反之亦然,或者在兩臺遠程系統(tǒng)之間復制文件或目錄。
1. 使用 SCP 從本地系統(tǒng)復制文件到遠程系統(tǒng)
使用 ??scp?
? 命令將文件從本地復制到遠程系統(tǒng),運行:
示例輸出:
讓我們分析一下上面的命令,看看每個參數(shù)都做了什么。
- ?
?File1.txt?
? - 源文件 - ?
?ostechnix?
? - 遠程系統(tǒng)的用戶名 - ?
?192.168.1.40?
? - 遠程系統(tǒng)的 IP 地址 - ?
?/home/ostechnix/?
? - 遠程系統(tǒng)中的目標目錄。這是我們想要傳輸源文件的絕對路徑,如??File.txt?
?。
你還可以修改目標文件的名稱。下面的命令將 ??File1.txt?
? 傳輸?shù)侥康牡兀4鏋?nbsp;??myfile.txt?
?。
將文件從本地復制到遠程系統(tǒng)
2. 使用 SCP 從本地系統(tǒng)復制多個文件到遠程系統(tǒng)
使用 ??scp?
? 命令將多個文件從本地系統(tǒng)傳輸?shù)竭h程系統(tǒng),運行:
示例輸出:
從本地復制多個文件到遠程系統(tǒng)
這里:
- ?
?File1.txt?
? 和??File2.txt?
? - 源文件名 - ?
?ostechnix@192.168.1.40?
? - 遠程系統(tǒng)的用戶名和 IP 地址 - ?
?/home/ostechnix?
? - 目標文件的路徑
如果文件具有相同的擴展名,你可以使用以下替代命令來實現(xiàn)相同的目標。
或者,
3. 使用 SCP 從本地到遠程系統(tǒng)遞歸復制目錄
遞歸地將整個目錄(包括子目錄及其內(nèi)容)從本地復制到遠程系統(tǒng),使用 ??-r?
? 參數(shù)。
從本地復制目錄到遠程系統(tǒng)
上述命令將整個 ??Documents?
? 目錄包括其內(nèi)容復制到目標系統(tǒng)。
其中,
- ?
?-r?
? - 遞歸復制文件和目錄,包括子目錄及其內(nèi)容 - ?
?Documents?
? - 源目錄名稱 - ?
?ostechnix@192.168.1.40?
? - 遠程系統(tǒng)的用戶名和 IP 地址 - ?
?/home/ostechnix?
? - 目標目錄的路徑
4. 用 SCP 將文件從遠程系統(tǒng)傳輸?shù)奖镜?/h4>
還記得我們從本地系統(tǒng)復制了 ??File1.txt?
? 到遠程系統(tǒng),讓我們把它復制回本地。
使用 ??scp?
? 命令從遠程系統(tǒng)復制文件到本地,運行:
其中
- ?
?ostechnix@192.168.1.40?
? - 遠程系統(tǒng)的用戶名和 IP 地址 - ?
?/home/ostechnix/File.txt?
? - 遠程系統(tǒng)文件的絕對路徑 - ?
?Downloads?
? - 本地保存復制文件的位置
從遠程系統(tǒng)傳輸文件到本地
5. 使用 SCP 將多個文件從遠程系統(tǒng)傳輸?shù)奖镜?/h4>
將多個文件從遠程系統(tǒng)復制到本地,在花括號內(nèi)注明文件的絕對路徑,如下所示:
將多個文件從遠程系統(tǒng)傳輸?shù)奖镜?/em>
上述命令將從遠程系統(tǒng)的 ??/home/ostechnix/?
? 目錄中復制 ??File1.txt?
? 和 ??File2.txt?
? 到本地的 ??Downloads?
? 目錄中。
注意,花括號內(nèi)的逗號后面沒有空格。
6. 從遠程系統(tǒng)遞歸復制目錄到本地
使用 ??scp?
? 從遠程系統(tǒng)遞歸復制整個目錄(包括子目錄及其內(nèi)容)到本地系統(tǒng),使用 ??-r?
? 參數(shù)。
上述命令將從遠程系統(tǒng)將整個 ??Documents?
? 目錄復制到本地的 ??Downloads?
? 目錄。
7. 使用 SCP 在兩臺遠程計算機之間復制文件
使用 ??scp?
? 命令將文件從一個遠程系統(tǒng)直接復制到另一個遠程系統(tǒng),運行:
它會要求你輸入兩個遠程系統(tǒng)的密碼:
其中,
- ?
?senthil@192.168.1.40?
? - 文件源端遠程系統(tǒng)的用戶名和 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/?
? 目錄。
在這種方法中,數(shù)據(jù)將直接從一個遠程系統(tǒng)傳輸?shù)搅硪粋€遠程系統(tǒng)。如果你想通過本地機器路由流量,使用 ??-3?
? 參數(shù),如下所示:
8. 使用 SCP 復制文件時啟用壓縮
到目前為止,我們在沒有壓縮的情況下傳輸了文件?,F(xiàn)在我們將使用 ??-C?
? 參數(shù)在傳輸文件時啟用壓縮。
??-C?
? 參數(shù)將在源端啟用壓縮,并在目標端自動解壓數(shù)據(jù)。
通過啟用壓縮,可以顯著提高文件復制或傳輸速度。
9. 使用 SCP 傳輸文件時限制帶寬
我們可以使用 ??-l?
? 參數(shù)限制帶寬。注意,最大帶寬單位為 Kbits/s。1 Byte = 8 bit。因此,如果你想將帶寬限制在 200KB/s,??-l?
? 的值將是 1600(200*8)。
這在傳輸大文件時非常有用,可以防止 SCP 限制帶寬。
10. 使用 SCP 復制文件時使用不同端口
作為系統(tǒng)管理員,出于安全原因,你可能在遠程服務器上 ??更改了 SSH 協(xié)議的默認端口??。這種情況下,你可以在傳輸文件時使用 ??-P?
? 參數(shù)指定端口號。注意:大寫的 ??P?
?。
11. 使用 SCP 復制文件時使用不同的加密方法
默認情況下,SCP 使用 ??AES-128?
? 對文件進行加密。如果你想使用不同的加密方法,使用 ??c?
? 參數(shù)。
例如,如果你想使用 3des-cbc 加密方法,命令如下所示:
要查看支持的密碼列表,執(zhí)行:
示例輸出:
12. 在詳細模式下使用 SCP 復制文件
如果你想知道使用 ??scp?
? 復制文件時幕后發(fā)生了什么,你可以使用 ??-v?
? 參數(shù)。使用詳細模式傳輸文件時,終端上會顯示執(zhí)行 ??scp?
? 命令執(zhí)行的每一步過程。這在故障排除時很方便。
在詳細模式下發(fā)送文件時,你將看到大量輸出,如下所示:
在詳細模式下使用 SCP 復制文件
13. 在安靜模式下使用 SCP 傳輸文件
我們可以使用 ??-q?
? 參數(shù)在安靜模式下傳輸文件。在安靜模式下共享文件時,不會在輸出中顯示進度、警告或診斷信息。
14. 使用 SCP 傳輸文件時保留文件屬性
使用 ??-p?
? 參數(shù)可以保留文件修改時間、訪問時間和模式等文件屬性。注意,這是小寫的 p。
15. 使用 SCP 復制文件時使用身份文件
SSH 同時支持基于密碼和密鑰的身份驗證。密鑰是 Linux 環(huán)境中使用最廣泛的身份驗證方法。
如果你想在傳輸文件時使用基于密鑰的身份驗證,使用 ??-i?
? 參數(shù)指定身份文件或私鑰。
16. 使用不同的 ssh 配置文件
在某些情況下,你需要使用不同的網(wǎng)絡來連接到 Linux 系統(tǒng),或你有一個代理服務器。這在情況下,你可以配合 ??-F?
? 參數(shù)使用不同的 ??ssh_config?
? 文件。
17. 使用 IPv4 或 IPv6 復制文件
在復制文件時,我們可以強制 SCP 只使用 IPv4 或 IPv6 地址。IPv4 網(wǎng)絡添加 ??-4?
? 參數(shù),IPv6 網(wǎng)絡添加 ??-6?
? 參數(shù)可以實現(xiàn)這一點。
常見問題
問題 1:什么是 SCP?
SCP 是一個命令行程序,旨在將文件和目錄從本地系統(tǒng)安全地傳輸?shù)竭h程系統(tǒng),反之亦然,或者直接在兩個遠程系統(tǒng)之間傳輸。
問題 2: 如何使用 SCP 將文件從本地復制到遠程計算機?
將文件從本地復制到遠程系統(tǒng),命令如下:
問題 3:如何遞歸復制文件和目錄?
遞歸復制包含子目錄的目錄,使用 ??-r?
? 參數(shù):
問題 4:使用 SCP 可以傳輸多個文件嗎?
當然,只要用空格分隔源文件名即可。
從本地復制多個文件到遠程:
從遠程復制多個文件到本地:
從一個遠程系統(tǒng)復制多個文件到另一個遠程系統(tǒng):
問題 5:如何傳輸目錄下的所有文件?
傳輸整個目錄,首先進入該目錄:
然后,
問題 6:可以壓縮文件嗎?
當然。使用 ??-C?
? 壓縮文件。文件會在源端壓縮,在目標端自動解壓縮。
問題 7:可以保留文件屬性嗎?
保留原始文件的修改時間、訪問時間和模式等文件屬性,使用 ??-p?
? 參數(shù)。
問題 8: 可以使用其他端口嗎?
當然。SCP 配合 ??-P?
? 參數(shù)允許你使用其他端口。
問題 9: 可以使用不同的加密方法嗎?
當然。使用 ??-c?
? 參數(shù)。
問題 10: 如何列出 SSH 支持的加密方法?
使用以下命令查看 SSH 和 SCP 支持的加密方法列表:
問題 11:SCP 真的安全嗎?
當然,它用起來是完全安全的。SCP 和 openSSH 使用相同的 SSH 機制。傳輸?shù)臄?shù)據(jù)在源端加密,目標端解密。
問題 12:可以從 Windows 系統(tǒng)傳輸文件到 Linux 嗎?
當然。使用 ??PSCP?
? 程序?qū)⑽募?windows 傳輸?shù)?Linux 平臺,你也可以使用 ??WinSCP?
?。
總結(jié)
在這篇全面指南中,我們了解了什么是 SCP,以及如何在 Linux 中使用 SCP 安全地傳輸文件,其中包括 17 個 SCP 命令示例,另外還回答了關(guān)于 SCP 的常見問題。
無論你是 Linux 管理人員、開發(fā)人員還是普通用戶,你都會面臨某個時候?qū)⑽募椭频竭h程系統(tǒng)或從遠程系統(tǒng)復制文件的情況,知道如何使用 SCP 安全地復制文件將是非常有用的。