在 Linux 上安全傳輸檔案的 14 SCP 命令範例

2019-12-13 10:02:00

SCP(安全複製Secure Copy)是 Linux 和 Unix 之類的系統中的命令列工具,用於通過網路安全地跨系統傳輸檔案和目錄。當我們使用 scp 命令將檔案和目錄從本地系統複製到遠端系統時,則在後端與遠端系統建立了 ssh 連線。換句話說,我們可以說 scp 在後端使用了相同的 SSH 安全機制,它需要密碼或金鑰進行身份驗證。

在本教學中,我們將討論 14 個有用的 Linux scp 命令範例。

scp 命令語法:

# scp <選項> <檔案或目錄> 使用者名稱@目標主機:/<資料夾># scp <選項> 使用者名稱@目標主機:/檔案 <本地資料夾>

scp 命令的第一個語法演示了如何將檔案或目錄從本地系統複製到特定資料夾下的目標主機。

scp 命令的第二種語法演示了如何將目標主機中的檔案複製到本地系統中。

下面列出了 scp 命令中使用最廣泛的一些選項,

  • -C 啟用壓縮
  • -i 指定識別檔案或私鑰
  • -l 複製時限制頻寬
  • -P 指定目標主機的 ssh 埠號
  • -p 複製時保留檔案的許可權、模式和存取時間
  • -q 禁止 SSH 警告訊息
  • -r 遞回複製檔案和目錄
  • -v 詳細輸出

現在讓我們跳入範例!

範例:1)使用 scp 將檔案從本地系統複製到遠端系統

假設我們要使用 scp 命令將 jdk 的 rpm 軟體包從本地 Linux 系統複製到遠端系統(172.20.10.8),請使用以下命令,

[root@linuxtechi ~]$ scp jdk-linux-x64_bin.rpm root@linuxtechi:/optroot@linuxtechi's password:jdk-linux-x64_bin.rpm                          100%   10MB  27.1MB/s   00:00[root@linuxtechi ~]$

上面的命令會將 jdk 的 rpm 軟體包檔案複製到 /opt 資料夾下的遠端系統。

範例:2)使用 scp 將檔案從遠端系統複製到本地系統

假設我們想將檔案從遠端系統複製到本地系統下的 /tmp 資料夾,執行以下 scp 命令,

[root@linuxtechi ~]$ scp root@linuxtechi:/root/Technical-Doc-RHS.odt /tmproot@linuxtechi's password:Technical-Doc-RHS.odt                         100% 1109KB  31.8MB/s   00:00[root@linuxtechi ~]$ ls -l /tmp/Technical-Doc-RHS.odt-rwx------. 1 pkumar pkumar 1135521 Oct 19 11:12 /tmp/Technical-Doc-RHS.odt[root@linuxtechi ~]$

範例:3)使用 scp 傳輸檔案時的詳細輸出(-v)

scp 命令中,我們可以使用 -v 選項啟用詳細輸出。使用詳細輸出,我們可以輕鬆地發現後台確切發生了什麼。這對於偵錯連線、認證和設定等問題非常有用。

root@linuxtechi ~]$ scp -v jdk-linux-x64_bin.rpm root@linuxtechi:/optExecuting: program /usr/bin/ssh host 172.20.10.8, user root, command scp -v -t /optOpenSSH_7.8p1, OpenSSL 1.1.1 FIPS  11 Sep 2018debug1: Reading configuration data /etc/ssh/ssh_configdebug1: Reading configuration data /etc/ssh/ssh_config.d/05-redhat.confdebug1: Reading configuration data /etc/crypto-policies/back-ends/openssh.configdebug1: /etc/ssh/ssh_config.d/05-redhat.conf line 8: Applying options for *debug1: Connecting to 172.20.10.8 [172.20.10.8] port 22.debug1: Connection established.…………debug1: Next authentication method: passwordroot@linuxtechi's password:

範例:4)將多個檔案傳輸到遠端系統

可以使用 scp 命令一次性將多個檔案複製/傳輸到遠端系統,在 scp 命令中指定多個檔案,並用空格隔開,範例如下所示

[root@linuxtechi ~]$ scp install.txt index.html jdk-linux-x64_bin.rpm root@linuxtechi:/mntroot@linuxtechi's password:install.txt                                      100%    0     0.0KB/s   00:00index.html                                       100%   85KB   7.2MB/s   00:00jdk-linux-x64_bin.rpm                            100%   10MB  25.3MB/s   00:00[root@linuxtechi ~]$

範例:5)在兩個遠端主機之間傳輸檔案

使用 scp 命令,我們可以在兩個遠端主機之間複製檔案和目錄,假設我們有一個可以連線到兩個遠端 Linux 系統的本地 Linux 系統,因此從我的本地 Linux 系統中,我可以使用 scp 命令在這兩個系統之間複製檔案,

命令語法:

# scp 使用者名稱@遠端主機1:/<要傳輸的檔案> 使用者名稱@遠端主機2:/<資料夾>

範例如下:

# scp root@linuxtechi:~/backup-Oct.zip root@linuxtechi:/tmp# ssh root@linuxtechi "ls -l /tmp/backup-Oct.zip"-rwx------. 1 root root 747438080 Oct 19 12:02 /tmp/backup-Oct.zip

範例:6)遞回複製檔案和目錄(-r)

scp 命令中使用 -r 選項將整個目錄從一個系統遞回地複製到另一個系統,範例如下所示:

[root@linuxtechi ~]$ scp -r Downloads root@linuxtechi:/opt

使用以下命令驗證 Downloads 資料夾是否已複製到遠端系統,

[root@linuxtechi ~]$ ssh root@linuxtechi "ls -ld /opt/Downloads"drwxr-xr-x. 2 root root 75 Oct 19 12:10 /opt/Downloads[root@linuxtechi ~]$

範例:7)通過啟用壓縮來提高傳輸速度(-C)

scp 命令中,我們可以通過使用 -C 選項啟用壓縮來提高傳輸速度,它將自動在源主機上啟用壓縮並在目標主機上解壓縮。

root@linuxtechi ~]$ scp -r -C Downloads root@linuxtechi:/mnt

在以上範例中,我們正在啟用壓縮的情況下傳輸下載目錄。

範例:8)複製時限制頻寬(-l)

scp 命令中使用 -l 選項設定複製時對頻寬使用的限制。頻寬以 Kbit/s 為單位指定,範例如下所示:

[root@linuxtechi ~]$ scp -l 500 jdk-linux-x64_bin.rpm  root@linuxtechi:/var

範例:9)在 scp 時指定其他 ssh 埠(-P)

在某些情況下,目標主機上的 ssh 埠會更改,因此在使用 scp 命令時,我們可以使用 -P 選項指定 ssh 埠號。

[root@linuxtechi ~]$ scp -P 2022 jdk-linux-x64_bin.rpm  root@linuxtechi:/var

在上面的範例中,遠端主機的 ssh 埠為 “2022”。

範例:10)複製時保留檔案的許可權、模式和存取時間(-p)

從源複製到目標時,在 scp 命令中使用 -p 選項保留許可權、存取時間和模式。

[root@linuxtechi ~]$ scp -p jdk-linux-x64_bin.rpm  root@linuxtechi:/var/tmpjdk-linux-x64_bin.rpm                            100%   10MB  13.5MB/s   00:00[root@linuxtechi ~]$

範例:11)在 scp 中以安靜模式傳輸檔案(-q)

scp 命令中使用 -q 選項可禁止顯示 ssh 的傳輸進度、警告和診斷訊息。範例如下所示:

[root@linuxtechi ~]$ scp -q -r Downloads root@linuxtechi:/var/tmp[root@linuxtechi ~]$

範例:12)在傳輸時使用 scp 中的識別檔案(-i)

在大多數 Linux 環境中,首選基於金鑰的身份驗證。在 scp 命令中,我們使用 -i 選項指定識別檔案(私鑰檔案),範例如下所示:

[root@linuxtechi ~]$ scp -i my_key.pem -r Downloads root@linuxtechi:/root

在上面的範例中,my_key.pem 是識別檔案或私鑰檔案。

範例:13)在 scp 中使用其他 ssh_config 檔案(-F)

在某些情況下,你使用不同的網路連線到 Linux 系統,可能某些網路位於代理伺服器後面,因此在這種情況下,我們必須具有不同的 ssh_config 檔案。

通過 -F 選項在 scp 命令中指定了不同的 ssh_config 檔案,範例如下所示:

[root@linuxtechi ~]$ scp -F /home/pkumar/new_ssh_config -r Downloads root@linuxtechi:/rootroot@linuxtechi's password:jdk-linux-x64_bin.rpm                     100%   10MB  16.6MB/s   00:00backup-Oct.zip                            100%  713MB  41.9MB/s   00:17index.html                                100%   85KB   6.6MB/s   00:00[root@linuxtechi ~]$

範例:14)在 scp 命令中使用其他加密方式(-c)

預設情況下,scp 使用 AES-128 加密方式來加密檔案。如果你想在 scp 命令中使用其他加密方式,請使用 -c 選項,後接加密方式名稱。

假設我們要在用 scp 命令傳輸檔案時使用 3des-cbc 加密方式,請執行以下 scp 命令:

[root@linuxtechi ~]# scp -c 3des-cbc -r Downloads root@linuxtechi:/root

使用以下命令列出 sshscp 支援的加密方式:

[root@linuxtechi ~]# ssh -Q cipher localhost | paste -d , -s -3des-cbc,aes128-cbc,aes192-cbc,aes256-cbc,root@linuxtechi,aes128-ctr,aes192-ctr,aes256-ctr,root@linuxtechi,root@linuxtechi,root@linuxtechi[root@linuxtechi ~]#

以上就是本教學的全部內容,要獲取有關 scp 命令的更多詳細資訊,請參考其手冊頁。請在下面的評論部分中分享你的反饋和評論。