如何在 Linux 上使用 scp 命令

已發表: 2022-06-28
筆記本電腦屏幕上的 Linux 終端。
fatmawati achmad zaenuri/Shutterstock.com

scp命令使在 Linux 計算機之間複製文件變得簡單而安全。 它使用 SSH 安全性,但最重要的是,它很簡單。 如果可以使用cp ,則可以使用scp

安全複製協議和 scp

讓我們定義幾個術語:有 SCP 和scp 。 大寫的 SCP 代表安全複製協議。 小寫的scp代表安全cp 。 換句話說,SCP 是一個協議,而scp是一個程序。

scp旨在成為一種在遠程 Linux 計算機之間複製文件的安全方法。 它使用 SSH 建立安全連接。 SSH 或安全外殼是一種加密網絡協議,通常用於訪問和登錄遠程 Linux 計算機。 在 Linux 發行版上,SSH 功能由 OpenSSH 提供。

如何在 Ubuntu 上設置遠程桌面
相關如何在 Ubuntu 上設置遠程桌面

SCP 有點長,人們對它在今天的使用表示擔憂。 自 OpenSSH 版本 8.8 起,SCP 已被視為已棄用。 scp的現代實現默認使用安全文件傳輸協議。 SSH 仍用於安全連接,但文件傳輸由 SFTP 處理。 這一切都是不可見的,並且在幕後神奇地發生,並且scp語法保持不變。

rsync程序比scp更受歡迎,但是您可能會遇到沒有安裝rsync的計算機,並且您沒有 root 權限,這意味著您無法繼續安裝它。 對於在自包含網絡上將文件從計算機複製到計算機, scp非常好。 要使scp正常工作,您必須在要復製到和從中復制的所有計算機上運行 SSH。

要查看計算機上安裝的 OpenSSH 版本,請鍵入:

 ssh -V 

獲取 OpenSSH 的版本

複製單個文件

與標準cp命令一樣, scp將文件從位置複製到目標位置。 要將文件複製到遠程計算機,您必須知道遠程計算機的 IP 地址或網絡名稱。 您還必須擁有對您要將文件發送到的位置具有寫入權限的用戶帳戶的憑據。

要將名為“sample.txt”的文件發送到本地網絡上名為“fedora-34”的計算機,語法為:

 scp ./sample.txt [email protected]:/home/dave/Downloads/ 

將單個文件複製到遠程計算機

該命令由以下部分組成:

  • scp : scp 命令
  • ./sample.txt :我們要發送的文件。 這是在當前目錄中。
  • dave@ :我們要將文件發送到的遠程計算機上的用戶帳戶。
  • fedora-34.local :遠程計算機的網絡名稱。
  • :/home/dave/Downloads/ :將文件複製到遠程計算機上的位置。 注意分隔計算機名稱和路徑的冒號“:”。

系統將提示您輸入遠程計算機上帳戶的密碼,然後復製文件。

如果您希望文件在遠程計算機上具有不同的名稱,您可以將文件名添加到目標路徑。 要復制同一個文件並將其命名為“different-file.txt”,請使用以下語法:

 scp ./sample.txt [email protected]:/home/dave/Downloads/different-file.txt 

使用新名稱將單個文件複製到遠程計算機

scp命令會默默地覆蓋現有文件,因此在復製文件時要小心。 如果目標計算機上已經存在與您正在復制的文件同名的文件,它將被覆蓋並丟失。

如果目標計算機沒有使用默認的 SSH 端口 22,您可以使用-P (端口號)選項提供適當的端口號。

檢索單個文件

要從遠程服務器複製文件,只需將遠程服務器作為源,並將要復製文件的本地路徑作為目標。 我們將從遠程計算機複製一個名為“development-plan.md”的文件到本地計算機的當前目錄。

 scp [email protected]:/home/dave/Downloads/development-plan.md。 

將單個文件從遠程服務器複製到本地計算機的當前目錄

如果將文件名添加到本地路徑,則會復制該文件並賦予該名稱。

 scp [email protected]:/home/dave/Downloads/development-plan.md ./dp-1.md 

使用新名稱將單個文件從遠程服務器複製到本地計算機的當前目錄

該文件被複製但重命名為我們指定的文件名。

 ls -hl *.md 

複製多個文件

在任一方向複製多個文件很容易。 您可以列出任意數量的源文件。 在這裡,我們複製了兩個 markdown 文件和一個 CSV 文件。

 scp ./dp-1.md ./dp-2.md ./dp-3.csv [email protected]:/home/dave/Downloads/ 

將多個命名文件複製到遠程計算機

這三個文件被複製到遠程計算機。 您也可以使用通配符。 該命令與上一個命令的作用完全相同。

 scp ./dp  [email protected]:/home/dave/Downloads/ 

使用文件名中的通配符將多個文件複製到遠程計算機

遞歸複製目錄

-r (遞歸)選項允許您使用單個命令複製整個目錄樹。 我們將兩個文件放在一個名為“data”的目錄中,並在“data”目錄中創建了一個名為“CSV”的目錄。 我們在“data/CSV”目錄中放置了一個 CSV 文件。

此命令複製文件並在遠程計算機上重新創建目錄結構。

 scp -r ./data [email protected]:/home/dave/Downloads/ 

將目錄樹複製到遠程計算機

在遠程服務器之間複製文件

您甚至可以指示scp將文件從一台遠程服務器複製到另一台服務器。 語法非常簡單。 您提供源服務器的帳戶名和網絡地址以及目標服務器的帳戶名和網絡地址。 這些文件從源服務器複製並複製到目標服務器上的位置。

雖然語法很簡單,但確保其他一切都到位需要更多的思考。 顯然,您嘗試將文件複製到遠程服務器上的位置必須可由您在命令行中指定的用戶帳戶訪問。 並且該用戶帳戶必須對該位置具有寫入權限。

一個更微妙的先決條件是必須在本地計算機和源計算機之間以及源服務器和目標服務器之間設置 SSH 訪問。 確保您可以使用 SSH從源服務器登錄到目標服務器。 如果你不能這樣做, scp將無法連接。

如何從 Linux Shell 創建和安裝 SSH 密鑰
相關如何從 Linux Shell 創建和安裝 SSH 密鑰

設置 SSH 密鑰以便您可以使用經過身份驗證但無密碼的訪問是目前首選的方法。 使用密碼很快就會變得一團糟,而且——因為系統會提示您輸入每個用戶帳戶的密碼——它會阻止您使用腳本完全自動化該過程。

我們為每個遠程服務器上使用的用戶帳戶設置 SSH 密鑰。 這為這兩個用戶提供了對另一台服務器的無縫 SSH 訪問。 這允許我們使用這兩個用戶帳戶向任一方向傳輸文件。

要將文件從 Manjaro 計算機上的“davem”用戶帳戶複製到 Fedora 計算機上的“dave”帳戶,通過我們本地 Ubuntu 計算機發出的scp命令,語法為:

 scp [email protected]:/home/davem/man  [email protected]:/home/dave/ 

將文件從一台遠程服務器複製到另一台。

我們默默地返回到命令行。 沒有跡象表明發生了什麼事。 在沒有消息就是好消息的前提下, scp僅報告此遠程到遠程複製的錯誤。 在檢查 Fedora 計算機時,我們可以看到來自 Manjaro 計算機的文件已被複製和接收。

在 Fedora 計算機上接收的來自 Manjaro 計算機的文件

默認情況下,文件直接從源計算機複製到目標計算機。 您可以使用-3 (三向)選項覆蓋它。

使用此選項,文件通過本地計算機從目標傳輸到源。 為此,需要從本地計算機到目標計算機的無縫 SSH 訪問。

 scp -3 [email protected]:/home/davem/man  [email protected]:/home/dave/ 

通過本地計算機將文件從一台遠程服務器複製到另一台服務器

即使通過本地計算機傳輸文件,仍然沒有任何跡象表明發生了任何事情。 布丁的證明,當然是檢查目標計算機。

其他選項

-p (保留文件屬性)將保留傳輸文件上的原始文件創建、所有權和訪問標誌。 它們將具有與源計算機上的原始文件相同的元數據。

如果您看到錯誤消息,請嘗試重複該命令並使用-v (詳細)標誌查看有關傳輸嘗試的詳細信息。 您應該能夠在輸出中發現故障點。

-C (壓縮)選項在復製文件時壓縮文件,並在收到文件時對其進行解壓縮。 這可以追溯到計算機之間的慢速調製解調器通信時代。 減小有效載荷的大小可以減少傳輸時間。

如今,壓縮和解壓縮文件所需的時間可能比壓縮和未壓縮傳輸之間的差異要長。 但是因為scp最適合用於在同一 LAN 上的計算機之間複製文件,所以傳輸速度應該不是太大的問題。

相關:如何使用 rsync 備份你的 Linux 系統