如何在 Linux 中使用 scp 命令
該命令scp
使在 Linux 機器之間複製文件變得簡單而安全。它使用 SSH 安全性,但最好的部分是它很簡單。如果可以使用cp
,可以使用scp
。
安全複製協議和 scp
讓我們定義幾個術語:有 SCP 和scp
. 大寫字母 SCP 代表安全複製協議。小寫scp
表示安全cp
。換句話說,SCP 是一個協議和scp
一個程序。
scp
旨在成為一種在遠程 Linux 計算機之間複製文件的安全可靠的方法。它使用 SSH 建立安全連接。SSH 或安全外殼是一種加密網絡協議,通常用於訪問和登錄遠程 Linux 計算機。在 Linux 發行版上,SSH 功能由 OpenSSH 提供。
SCP 有點過時了,這些天人們對它的使用提出了擔憂。從 OpenSSH 8.8 開始,不推薦使用 SCP。現代實現scp
默認使用安全文件傳輸協議。SSH 仍用於安全連接,但文件傳輸是通過 SFTP 完成的。這一切都是不可見的,並且在幕後神奇地發生,並且scp
語法保持不變。
這個rsync
程序是首選scp
,但是你可能會遇到一台沒有rsync
安裝它並且你沒有root權限的計算機,這意味著你無法安裝它。對於在離線網絡上將文件從 PC 複製到 PCscp
很好。要scp
工作,您必須在要復制的所有計算機上運行 SSH。
要查看您機器上安裝的 OpenSSH 版本,請鍵入:
ssh -V
複製單個文件
與標準cp
命令一樣,將scp
文件從源位置複製到目標位置。要將文件複製到遠程計算機,您必須知道遠程計算機的 IP 地址或網絡名稱。您還必須擁有對您將文件上傳到的位置具有寫入權限的用戶帳戶的憑據。
要將名為“sample.txt”的文件發送到本地網絡上名為“fedora-34”的計算機,請使用以下語法:
scp. /sample.txt dave@fedora-34.local:/home/dave/Downloads/
團隊包括:
- scp:scp命令
- ./sample.txt:我們要發送的文件。它在當前目錄中。
- dave@:我們要將文件發送到的遠程計算機上的用戶帳戶。
- fedora-34.local:遠程計算機的網絡名稱。
- :/home/dave/Downloads/:在遠程機器上複製文件的位置。注意分隔計算機名稱和路徑的冒號“:”。
系統將提示您輸入遠程計算機上帳戶的密碼,然後復製文件。
如果您希望文件在遠程計算機上具有不同的名稱,您可以將文件名附加到目標路徑。要復制相同的文件並將其命名為“other-file.txt”,請使用以下語法:
scp. /sample.txt dave@fedora-34.local:/home/dave/Downloads/different-file.txt
該命令scp
將自動覆蓋現有文件,因此在復製文件時要小心。如果目標計算機上已經存在與復製文件同名的文件,則該文件將被覆蓋並丟失。
如果目標計算機沒有使用默認的 SSH 端口 22,您可以使用-P
(port number) 參數指定適當的端口號。
獲取一個文件
要從遠程服務器複製文件,只需將遠程服務器指定為源,然後指定要將文件複製到的本地路徑作為目標。我們將從遠程機器上複製一個名為“development-plan.md”的文件到本地機器上的當前目錄。
scp dave@fedora-34.local:/home/dave/Downloads/development-plan.md.
如果您將文件名添加到本地路徑,則該文件將被複製並賦予該名稱。
scp dave@fedora-34.local:/home/dave/Downloads/development-plan.md. /dp-1.md
該文件被複製但重命名為我們指定的文件名。
ls -hl *.md
複製多個文件
向任何方向複製多個文件非常容易。您可以列出任意數量的源文件。在這裡,我們複製了兩個 markdown 文件和一個 CSV 文件。
scp. /dp-1.md. /dp-2.md. /dp-3.csv dave@fedora-34.local:/home/dave/Downloads/
三個文件被複製到遠程計算機。您也可以使用通配符。此命令的作用與上一個命令相同。
scp. /dp. dave@fedora-34.local:/home/dave/Downloads/
遞歸複製目錄
( -r
recursive) 選項允許您使用單個命令複製整個目錄樹。我們將兩個文件放在名為“data”的目錄中,並在“data”目錄中創建了一個名為“CSV”的目錄。我們已將 CSV 文件放在“data/CSV”目錄中。
此命令複製文件並在遠程計算機上重新創建目錄結構。
scp -r. /data dave@fedora-34.local:/home/dave/Downloads/
在遠程服務器之間複製文件
您甚至可以指示scp
將文件從一台遠程服務器複製到另一台服務器。語法非常簡單。您提供源服務器的帳戶名和網絡地址,以及目標服務器的帳戶名和網絡地址。這些文件從源服務器複製並複製到目標服務器上的某個位置。
雖然語法很簡單,但確保其他一切都到位需要更多的思考。顯然,您嘗試將文件複製到遠程服務器上的位置必須可由您在命令行中指定的用戶帳戶訪問。並且該用戶帳戶必須對該位置具有寫入權限。
一個更微妙的先決條件是必須在本地計算機和源計算機之間以及源服務器和目標服務器之間設置 SSH 訪問。確保您可以使用 SSH 從源服務器登錄到目標服務器。如果您不能這樣做,scp
您將無法連接。
設置 SSH 密鑰以允許經過身份驗證但無需密碼的訪問是目前首選的方法。密碼的使用很快就會變得混亂,並且由於系統會提示您為每個用戶帳戶輸入密碼,因此它不允許您使用腳本完全自動化該過程。
我們為在每個遠程服務器上使用的用戶帳戶設置 SSH 密鑰。這為兩個用戶提供了對另一台服務器的無縫 SSH 訪問。這允許我們使用這兩個用戶帳戶在任一方向傳輸文件。
要使用從我們本地 Ubuntu 機器發出的命令將文件從 Manjaro 機器上的“davem”用戶帳戶複製到 Fedora 機器上的“dave”帳戶,使用scp
以下語法:
scp davem@manjaro20-0-1.local:/home/davem/man. dave@fedora-34.local:/home/dave/
我們默默地回到命令行。沒有跡象表明發生了什麼事。假設沒有消息就是好消息,我們scp
只報告此遠程副本的錯誤。檢查 Fedora 計算機時,我們看到 Manjaro 計算機中的文件已被複製和檢索。
默認情況下,文件直接從源計算機複製到目標計算機。您可以使用-3
(三向)選項覆蓋它。
使用此選項,文件通過本地計算機從目標傳輸到源。這需要從本地機器到目標機器的無縫 SSH 訪問。
scp -3 davem@manjaro20-0-1.local:/home/davem/man. dave@fedora-34.local:/home/dave/
即使通過本地計算機傳輸文件,仍然沒有任何跡象表明發生了任何事情。布丁的證明,當然是檢查目標計算機。
其他選項
(-p
保留文件屬性)選項將保留上傳文件的原始文件創建、所有者和訪問標誌。它們將具有與源計算機上的原始文件相同的元數據。
如果您看到錯誤消息,請嘗試重試該命令並使用-v
(verbose) 標誌查看有關傳輸嘗試的詳細信息。您應該能夠確定輸出中的故障點。
( -C
compress) 選項在復製文件時對其進行壓縮,並在收到文件時對其進行解壓縮。這可以追溯到計算機之間的慢速調製解調器通信時代。減小有效載荷大小可以減少傳輸時間。
目前,壓縮和解壓縮文件所花費的時間可能超過壓縮和未壓縮傳輸之間的差異。但是由於scp
它最好用於在同一本地網絡上的計算機之間複製文件,因此傳輸速度應該不是一個大問題。
發佈留言