scp (Secure Copy) 是一個用於將文件安全地複製到遠程主機和從遠程主機複製的命令。在內部使用 SSH 來執行操作。

安裝 scp 命令

scp 包含在 OpenSSH 客戶端包中。 (((openssh-server 該軟件包提供了一個 SSH 守護進程, openssh-client 該軟件包提供了多種 SSH 相關工具。 )。

對於 Ubuntu / Debian(及其衍生產品)

你可以安裝 scp 使用 apt 命令。

sudo apt install openssh-client

對於 Fedora / CentOS(基於 RedHat 的發行版和衍生產品)

你可以安裝 scp 使用 dnf 命令。

sudo dnf install openssh-clients  #the name has an extra 's'

筆記: 傳輸文件 scp, 那 應該這樣做 它顯示在發送方和接收方上。如果你試試 scp 在沒有的機器上 scp 安裝後,您可能會收到一條錯誤消息 scp: command not found 即使你可能有 scp 本地安裝。

scp的基本用法

scp 命令的核心是從源中獲取文件並將其複製到目標。

scp <source> <target>

有幾種方法可以指定 source 什麼時候 target..常見的有:

從本地機器複製到遠程機器

scp path/to/local_file remote_host:path/to/remote_file

這裡 remote_host 能夠

  • IP地址
  • 域名
  • 定義主機 /etc/hosts 文檔
  • 定義主機 ~/.ssh/config

例如,複製文件 me.png 從我的本地機器到我的主目錄 ubuntu-server (被定義為) /etc/hosts), 我可以打字。

scp /home/pulsar17/me.png ubuntu-server:~/me.png
從本地機器傳輸到遠程機器

當您以用戶身份運行此命令時 pulsar17同一用戶 一定是 此語法將顯示在目標機器上 target 去工作。

從遠程機器複製到本地機器

要從遠程機器複製到本地機器,只需在源和目標之間切換。命令必須繼續運行 在本地機器上..

scp remote_host:path/to/remote_file path/to/local_directory

對於此命令,執行該命令的用戶必須同時存在於本地和遠程計算機上。

複製為遠程計算機上的特定用戶

您還可以在復制時指定用戶。 scp 複製文件並將所有者設置為 user..

scp path/to/local_file [email protected]_host:path/to/remote_file

複製以下命令 me.png 在遠程機器上,但作為用戶 juniordev..

scp /home/pulsar17/me.png [email protected]:~/me.png
以用戶身份複製示例

您可以使用此語法以您可以訪問的遠程計算機上的任何用戶身份進行複制。

以特定用戶身份從遠程計算機複製 只需在源和目標之間切換。

方便的選擇

scp 有很多選擇。這裡有一些有用的。

帶有 -r 選項的 scp

利用 -r 您可以選擇遞歸複製目錄(所有文件和子目錄)。

scp -r /home/pulsar17/scripts ubuntu-server:~/
目錄複製整個目錄

上面的命令將復制整個內容 scripts 遠程機器的目錄。

帶有 -p 選項的 scp

這個選項 scp 保留原始文件的修改時間、訪問時間和模式。

帶有 -q 選項的 scp

啟用安靜模式。它還禁用來自進度表和 ssh 的警告和診斷消息。

scp -q /home/pulsar17/me.png  ubuntu-server:~/
安靜模式 1靜音模式

SSH配置,scp好用

如果您覺得需要使用 scp 在許多情況下,您可以以節省時間和輸入的方式設置您的環境。有兩種方法可以做到這一點。

將公共主機添加到配置文件中

有兩個地方可以將 IP 地址映射到名稱,因此您不必多次輸入 IP 地址。 在本地機器上..這些是 /etc/hosts 有文件 ~/.ssh/config..

如果您需要使用特定於 SSH 的選項,則最好 ~/.ssh/config..下面介紹如何使用這兩個文件進行配置。只能使用其中之一。

~/.ssh/config 文檔

打開 ~/.ssh/config 該文件位於您選擇的編輯器中。 使用 nano 編輯器:

nano ~/.ssh/config

添加以下行。

Host ubuntu-server
        User root
        HostName 192.168.1.168
        #Port 22002 You can specify a port too

保存文件並退出 nano。您可以將多個主機添加到此文件。此配置後可更換 [email protected]_host 配置文件中對應主機後的名稱。因此,例如,您可以使用:

# Instead of scp /home/pulsar17/me.png [email protected]:~/me.png just type
scp /home/pulsar17/me.png ubuntu-server:~/me.png

/etc/hosts 文檔

此文件包含 IP 地址到主機名的映射,例如鍵值映射。 IP地址映射 192.168.1.11 姓名 my-server, 類型:

echo 192.168.1.11$'t'my-server | sudo tee -a /etc/hosts

這個 $'t' 印刷文字 Tab 文件中的字符。

完成此操作後,您可以使用製表符完成來擺脫 bash。輸入新映射的名稱後(my-server 在這種情況下) scp 您所要做的就是輸入前幾個字母並按 Tab , Bash 自動完成名稱。 (但是,您仍然需要您的用戶名。只需自動完成您的主機名。)

SSH 密鑰而不是密碼

您可以使用 SSH 密鑰登錄遠程機器,而不是使用傳統的基於密碼的身份驗證。 按照本教程設置 SSH 密鑰。你只需要做一次。

結論是

scp 這是一個非常有用的命令,可以安全地將文件從一台機器複製到另一台機器。在本文中,您了解了不同的選項 scp 以及如何通過設置 ssh 密鑰和適當的配置文件來利用這種能力。