scp (安全複製)是一個用於安全地將文件複製到遠程主機和從遠程主機複製的命令。它在內部使用 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 地址映射到名稱,因此您不必多次輸入它們。 在您的本地機器上。 這些是 /etc/hosts 文件和 ~/.ssh/config.

如果您需要使用特定於 SSH 的選項, ~/.ssh/config. 顯示如何使用這兩個文件進行配置。請僅使用其中一種。

~/.ssh/config 文檔

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

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 密鑰和適當的配置文件以利用其功能。