Linux中國

在 Linux 下使用 scp 命令

scp 安全拷貝協議 Secure Copy Protocol 的縮寫,和眾多 Linux/Unix 使用者所熟知的拷貝(cp)命令一樣。scp 的使用方式類似於 cp 命令,cp 命令將一個文件或文件夾從本地操作系統的一個位置(源)拷貝到目標位置(目的),而 scp 用來將文件或文件夾從網路上的一個主機拷貝到另一個主機當中去。

scp 命令的使用方法如下所示,在這個例子中,我將一個叫 「importantfile」 的文件從本機(10.10.16.147)拷貝到遠程主機(10.0.0.6)中。在這個命令里,你也可以使用主機名字來替代IP地址。

[root@localhost ~]# scp importantfile admin@10.0.0.6:/home/admin/
The authenticity of host '10.0.0.6 (10.0.0.6)' can't be established.
RSA key fingerprint is SHA256:LqBzkeGa6K9BfWWKgcKlQoE0u+gjorX0lPLx5YftX1Y.
RSA key fingerprint is MD5:ed:44:42:59:3e:dd:4c:12:43:4a:89:b1:5d:bd:9e:20.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.0.6' (RSA) to the list of known hosts.
admin@10.0.0.6's password:
importantfile                                 100%    0     0.0KB/s   00:00
[root@localhost ~]#

類似的,如果你想從一個遠程主機中取得文件,你可以利用如下的 scp 命令。

[root@localhost ~]# scp root@10.10.16.137:/root/importantfile /home/admin/
The authenticity of host '10.10.16.137 (10.10.16.137)' can't be established.
RSA key fingerprint is b0:b0:a3:c3:2e:94:13:0c:29:2e:ba:0b:d3:d6:12:8f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.10.16.137' (RSA) to the list of known hosts.
root@10.10.16.137's password:
importantfile 100% 0 0.0KB/s 00:00
[root@localhost ~]#

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

示例輸出

scp 可選參數如下所示:

 -B      採取批量模式(避免詢問密碼或口令)
 -C      啟用壓縮。通過指明 -C 參數來開啟壓縮模式。
 -c 加密方式
         選擇在傳輸過程中用來加密的加密方式 這個選項會被直接傳遞到 ssh(1)。
 -F ssh 配置
         給 ssh 指定一個用來替代默認配置的配置文件。這個選項會被直接傳遞到 ssh(1)。
 -l 限速
         限制命令使用的帶寬,默認單位是 Kbit/s。
 -P 埠
         指定需要的連接的遠程主機的埠。  
         注意,這個選項使用的是一個大寫的「P」,因為小寫的「-p」已經用來保留目標文件的時間和模式相關信息。(LCTT 譯註:ssh 命令中使用小寫的「-p」來指定目標埠。)
 -p      保留文件原來的修改時間,訪問時間以及許可權模式。
 -q      靜默模式:不顯示來自 ssh(1) 命令的進度信息,警告和診斷信息。
 -r      遞歸拷貝整個目錄。
         注意,scp 命令在樹形遍歷的時候同樣會跟隨符號連接,複製所連接的文件。
 -v      詳細模式。scp 和 ssh(1) 將會列印出處理過程中的調試信息。這可以幫助你調試連接、認證和配置方面的問題。

詳細模式

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

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

[root@localhost ~]# scp -v abc.txt admin@10.0.0.6:/home/admin
Executing: program /usr/bin/ssh host 10.0.0.6, user admin, 
command scp -v -t/home/admin
OpenSSH_7.1p1, OpenSSL 1.0.2d-fips 9 Jul 2015
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 56: Applying options for *
debug1: Connecting to 10.0.0.6 [10.0.0.6] port 22.
debug1: Connection established.
debug1: Server host key: ssh-rsa SHA256:LqBzkeGa6K9BfWWKgcKlQoE0u+gjorX0lPLx5YftX1Y
debug1: Next authentication method: publickey
debug1: Trying private key: /root/.ssh/id_rsa
debug1: Trying private key: /root/.ssh/id_dsa
debug1: Trying private key: /root/.ssh/id_ecdsa
debug1: Trying private key: /root/.ssh/id_ed25519
debug1: Next authentication method: password
admin@10.0.0.6's password:
debug1: Authentication succeeded (password).
Authenticated to 10.0.0.6 ([10.0.0.6]:22).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: Sending environment.
debug1: Sending command: scp -v -t /home/admin
Sending file modes: C0644 174 abc.txt
Sink: C0644 174 abc.txt
abc.txt                                                                                                                               100%  174     0.2KB/s   00:00
Transferred: sent 3024, received 2584 bytes, in 0.3 seconds
Bytes per second: sent 9863.3, received 8428.1
debug1: Exit status 0
[root@localhost ~]#

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

靜默模式

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

上一次我們僅僅使用 -r 參數,它顯示了逐個文件的信息,但這一次當我們使用了 -q 參數,它就不顯示進度信息。

利用 scp 的 -p 選項來保留目標文件的更新時間,訪問時間和許可權模式。

通過 -P 選項來指定遠程主機的連接埠

scp 使用 ssh 命令來在兩個主機之間傳輸文件,因為 ssh 默認使用的是22埠號,所以 scp 也使用相同的22埠號。

如果我們希望改變這個埠號,我們可以使用 -P(大寫的 P,因為小寫的 p 用來保持文件的訪問時間等)選項來指定所需的埠號。

舉個例子,如果我們想要使用2222埠號,我們可以使用如下的命令

[root@localhost ~]# scp -P 2222 abcd1 root@10.10.16.137:/root/

限制命令使用的帶寬,指定的單位是 Kbit/s

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

開啟壓縮

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

選擇加密數據的加密方式

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

現在你可以利用 scp(Secure copy)命令在你所屬網路中的兩個節點之間安全地拷貝文件了。

via: https://www.unixmen.com/scp-command-linuxunix/

作者:Naga Ramesh 譯者:lujianbo 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國