天天看點

在 Linux 下使用 scp 指令

scp 是安全拷貝協定secure copy protocol的縮寫,和衆多 linux/unix 使用者所熟知的拷貝(cp)指令一樣。scp 的使用方式類似于 cp 指令,cp 指令将一個檔案或檔案夾從本地作業系統的一個位置(源)拷貝到目标位置(目的),而 scp 用來将檔案或檔案夾從網絡上的一個主機拷貝到另一個主機當中去。

scp 指令的使用方法如下所示,在這個例子中,我将一個叫 “importantfile” 的檔案從本機(10.10.16.147)拷貝到遠端主機(10.0.0.6)中。在這個指令裡,你也可以使用主機名字來替代ip位址。

<code>[root@localhost ~]# scp importantfile [email protected]:/home/admin/</code>

<code>the authenticity of host '10.0.0.6 (10.0.0.6)' can't be established.</code>

<code>rsa key fingerprint is sha256:lqbzkega6k9bfwwkgcklqoe0u+gjorx0lplx5yftx1y.</code>

<code>rsa key fingerprint is md5:ed:44:42:59:3e:dd:4c:12:43:4a:89:b1:5d:bd:9e:20.</code>

<code>are you sure you want to continue connecting (yes/no)? yes</code>

<code>warning: permanently added '10.0.0.6' (rsa) to the list of known hosts.</code>

<code>[email protected]'s password:</code>

<code>importantfile 100% 0 0.0kb/s 00:00</code>

<code>[root@localhost ~]#</code>

類似的,如果你想從一個遠端主機中取得檔案,你可以利用如下的 scp 指令。

<code>[root@localhost ~]# scp [email protected]:/root/importantfile /home/admin/</code>

<code>the authenticity of host '10.10.16.137 (10.10.16.137)' can't be established.</code>

<code>rsa key fingerprint is b0:b0:a3:c3:2e:94:13:0c:29:2e:ba:0b:d3:d6:12:8f.</code>

<code>warning: permanently added '10.10.16.137' (rsa) to the list of known hosts.</code>

<code>[email protected]'s password:</code>

<code>importantfile 100% 0 0.0kb/s 00:00</code>

你也可以像 cp 指令一樣,在 scp 指令中使用不同的選項,scp 的 man 幫助詳細地闡述了不同選項的用法和用處。

示例輸出

在 Linux 下使用 scp 指令

scp 可選參數如下所示:

<code>-b 采取批量模式(避免詢問密碼或密碼)</code>

<code>-c 啟用壓縮。通過指明 -c 參數來開啟壓縮模式。</code>

<code>-c 加密方式</code>

<code>選擇在傳輸過程中用來加密的加密方式 這個選項會被直接傳遞到 ssh(1)。</code>

<code>-f ssh 配置</code>

<code>給 ssh 指定一個用來替代預設配置的配置檔案。這個選項會被直接傳遞到 ssh(1)。</code>

<code>-l 限速</code>

<code>限制指令使用的帶寬,預設機關是 kbit/s。</code>

<code>-p 端口</code>

<code>指定需要的連接配接的遠端主機的端口。</code>

<code>注意,這個選項使用的是一個大寫的“p”,因為小寫的“-p”已經用來保留目标檔案的時間和模式相關資訊。(lctt 譯注:ssh 指令中使用小寫的“-p”來指定目标端口。)</code>

<code>-p 保留檔案原來的修改時間,通路時間以及權限模式。</code>

<code>-q 靜默模式:不顯示來自 ssh(1) 指令的進度資訊,警告和診斷資訊。</code>

<code>-r 遞歸拷貝整個目錄。</code>

<code>注意,scp 指令在樹形周遊的時候同樣會跟随符号連接配接,複制所連接配接的檔案。</code>

<code>-v 詳細模式。scp 和 ssh(1) 将會列印出處理過程中的調試資訊。這可以幫助你調試連接配接、認證和配置方面的問題。</code>

詳細模式

利用 scp 指令的 -v 選項,你可以得到認證、調試等的相關細節資訊。

在 Linux 下使用 scp 指令

當我們使用 -v 選項的時候,一個簡單的輸出如下所示:

<code>[root@localhost ~]# scp -v abc.txt [email protected]:/home/admin</code>

<code>executing: program /usr/bin/ssh host 10.0.0.6, user admin,</code>

<code>command scp -v -t/home/admin</code>

<code>openssh_7.1p1, openssl 1.0.2d-fips 9 jul 2015</code>

<code>debug1: reading configuration data /etc/ssh/ssh_config</code>

<code>debug1: /etc/ssh/ssh_config line 56: applying options for *</code>

<code>debug1: connecting to 10.0.0.6 [10.0.0.6] port 22.</code>

<code>debug1: connection established.</code>

<code>debug1: server host key: ssh-rsa sha256:lqbzkega6k9bfwwkgcklqoe0u+gjorx0lplx5yftx1y</code>

<code>debug1: next authentication method: publickey</code>

<code>debug1: trying private key: /root/.ssh/id_rsa</code>

<code>debug1: trying private key: /root/.ssh/id_dsa</code>

<code>debug1: trying private key: /root/.ssh/id_ecdsa</code>

<code>debug1: trying private key: /root/.ssh/id_ed25519</code>

<code>debug1: next authentication method: password</code>

<code>debug1: authentication succeeded (password).</code>

<code>authenticated to 10.0.0.6 ([10.0.0.6]:22).</code>

<code>debug1: channel 0: new [client-session]</code>

<code>debug1: requesting [email protected]</code>

<code>debug1: entering interactive session.</code>

<code>debug1: sending environment.</code>

<code>debug1: sending command: scp -v -t /home/admin</code>

<code>sending file modes: c0644 174 abc.txt</code>

<code>sink: c0644 174 abc.txt</code>

<code>abc.txt 100% 174 0.2kb/s 00:00</code>

<code>transferred: sent 3024, received 2584 bytes, in 0.3 seconds</code>

<code>bytes per second: sent 9863.3, received 8428.1</code>

<code>debug1: exit status 0</code>

當我們需要拷貝一個目錄或者檔案夾的時候,我們可以使用 -r 選項,它會遞歸拷貝整個目錄。

在 Linux 下使用 scp 指令

靜默模式

如果你想要關閉進度資訊以及警告和診斷資訊,你可以通過使用scp指令中的-q選項.

在 Linux 下使用 scp 指令

上一次我們僅僅使用 -r 參數,它顯示了逐個檔案的資訊,但這一次當我們使用了 -q 參數,它就不顯示進度資訊。

利用 scp 的 -p 選項來保留目标檔案的更新時間,通路時間和權限模式。

在 Linux 下使用 scp 指令

通過 -p 選項來指定遠端主機的連接配接端口

scp 使用 ssh 指令來在兩個主機之間傳輸檔案,因為 ssh 預設使用的是22端口号,是以 scp 也使用相同的22端口号。

如果我們希望改變這個端口号,我們可以使用 -p(大寫的 p,因為小寫的 p 用來保持檔案的通路時間等)選項來指定所需的端口号。

舉個例子,如果我們想要使用2222端口号,我們可以使用如下的指令

<code>[root@localhost ~]# scp -p 2222 abcd1 [email protected]:/root/</code>

限制指令使用的帶寬,指定的機關是 kbit/s

如下所示,我們可以使用 -l 參數來指定 scp 指令所使用的帶寬,在此我們将速度限制為512kbit/s。

在 Linux 下使用 scp 指令

開啟壓縮

如下所示,我們可以通過開啟 scp 指令的壓縮模式來節省傳輸過程中的帶寬和時間。

在 Linux 下使用 scp 指令

選擇加密資料的加密方式

scp 預設使用 aes-128 的加密方式,如果我們想要改變這個加密方式,可以通過 -c(小寫的 c) 參數來指定其他的加密方式。

在 Linux 下使用 scp 指令

現在你可以利用 scp(secure copy)指令在你所屬網絡中的兩個節點之間安全地拷貝檔案了。

原文釋出時間為:2016-06-13

本文來自雲栖社群合作夥伴“linux中國”

繼續閱讀