Linuxでファイル/フォルダを転送するための10個のSCPコマンド


Linux管理者は、CLI環境に精通している必要があります。 LinuxサーバーのGUIモードは、インストールするのが一般的ではないためです。 SSHは、Linux管理者がリモート経由で安全な方法でサーバーを管理できるようにするための最も一般的なプロトコルです。 SSHコマンドが組み込まれており、SCPコマンドがあります。 SCPは、サーバー間で安全な方法でファイルをコピーするために使用されます。

以下のコマンドは、「username account」を使用して、「copysource_file_name」を「destination_host」の「destination_folder」に読み込みます。

scp source_file_name [email protected]_host:destination_folder

SCPコマンドには、使用できる多くのパラメーターがあります。日常の使用に役立つ可能性のあるパラメータは次のとおりです。

-vパラメーターを使用してSCPプロセスの詳細情報を提供します

パラメータなしの基本的なSCPコマンドは、ファイルをバックグラウンドでコピーします。プロセスが完了するか、エラーが表示されない限り、ユーザーには何も表示されません。 「-v」パラメータを使用して、デバッグ情報を画面に出力できます。これは、接続、認証、および構成の問題のデバッグに役立ちます。

[email protected] ~/Documents $ scp -v Label.pdf [email protected]:.
Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -t .
OpenSSH_6.0p1 Debian-3, OpenSSL 1.0.1c 10 May 2012
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 202.x.x.x [202.x.x.x] port 22.
debug1: Connection established.
debug1: Host '202.x.x.x' is known and matches the RSA host key.
debug1: Found key in /home/pungki/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: Next authentication method: password
[email protected]'s password:
debug1: Authentication succeeded (password).
Authenticated to 202.x.x.x ([202.x.x.x]:22).
Sending file modes: C0770 3760348 Label.pdf
Sink: C0770 3760348 Label.pdf
Label.pdf 100% 3672KB 136.0KB/s 00:27
Transferred: sent 3766304, received 3000 bytes, in 65.2 seconds
Bytes per second: sent 57766.4, received 46.0
debug1: Exit status 0

元のファイルから変更時間、アクセス時間、およびモードを提供します

「-p」パラメータはこれに役立ちます。推定時間と接続速度が画面に表示されます。

[email protected] ~/Documents $ scp -p Label.pdf [email protected]:.
[email protected]'s password:
Label.pdf 100% 3672KB 126.6KB/s 00:29

-Cパラメータを使用してファイル転送を高速化します

ファイル転送を高速化できるパラメータの1つは、「-C」パラメータです。 「-C」パラメータは、外出先でファイルを圧縮します。ユニークなことは、圧縮がネットワークでのみ発生することです。ファイルが宛先サーバーに到着すると、圧縮が行われる前と同じように元のサイズに戻ります。

これらのコマンドを見てください。 93Mbの単一ファイルを使用しています。

[email protected] ~/Documents $ scp -pv messages.log [email protected]:.
Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -p -t .
OpenSSH_6.0p1 Debian-3, OpenSSL 1.0.1c 10 May 2012
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 202.x.x.x [202.x.x.x] port 22.
debug1: Connection established.
debug1: identity file /home/pungki/.ssh/id_rsa type -1
debug1: Found key in /home/pungki/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: Trying private key: /home/pungki/.ssh/id_rsa
debug1: Next authentication method: password
[email protected]'s password:
debug1: Authentication succeeded (password).
Authenticated to 202.x.x.x ([202.x.x.x]:22).
debug1: Sending command: scp -v -p -t .
File mtime 1323853868 atime 1380425711
Sending file timestamps: T1323853868 0 1380425711 0
messages.log 100% 93MB 58.6KB/s 27:05
Transferred: sent 97614832, received 25976 bytes, in 1661.3 seconds
Bytes per second: sent 58758.4, received 15.6
debug1: Exit status 0

「-C」パラメータなしでファイルをコピーすると、1661.3秒になります。 Yoは、結果を「-C」パラメーターを使用する以下のコマンドと比較する場合があります。

[email protected] ~/Documents $ scp -Cpv messages.log [email protected]:.
Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -p -t .
OpenSSH_6.0p1 Debian-3, OpenSSL 1.0.1c 10 May 2012
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 202.x.x.x [202.x.x.x] port 22.
debug1: Connection established.
debug1: identity file /home/pungki/.ssh/id_rsa type -1
debug1: Host '202.x.x.x' is known and matches the RSA host key.
debug1: Found key in /home/pungki/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: Next authentication method: publickey
debug1: Trying private key: /home/pungki/.ssh/id_rsa
debug1: Next authentication method: password
[email protected]'s password:
debug1: Enabling compression at level 6.
debug1: Authentication succeeded (password).
Authenticated to 202.x.x.x ([202.x.x.x]:22).
debug1: channel 0: new [client-session]
debug1: Sending command: scp -v -p -t .
File mtime 1323853868 atime 1380428748
Sending file timestamps: T1323853868 0 1380428748 0
Sink: T1323853868 0 1380428748 0
Sending file modes: C0600 97517300 messages.log
messages.log 100% 93MB 602.7KB/s 02:38
Transferred: sent 8905840, received 15768 bytes, in 162.5 seconds
Bytes per second: sent 54813.9, received 97.0
debug1: Exit status 0
debug1: compress outgoing: raw data 97571111, compressed 8806191, factor 0.09
debug1: compress incoming: raw data 7885, compressed 3821, factor 0.48

ご覧のとおり、圧縮を使用している場合、転送プロセスは162.5秒で実行されます。 「-C」パラメータを使用しない場合よりも10倍高速です。ネットワークを介して大量のファイルをコピーする場合、「-C」パラメーターを使用すると、必要な合計時間を短縮できます。

圧縮方法がどのファイルでも機能しないことに注意する必要があります。ソースファイルがすでに圧縮されている場合、そこには何の改善も見られません。 .zip、.rar、pictures、.isoファイルなどのファイルは、「-C」パラメーターの影響を受けません。

別の暗号を選択してファイルを暗号化する

デフォルトでは、SCPは「AES-128」を使用してファイルを暗号化します。別の暗号に変更して暗号化する場合は、「-c」パラメーターを使用できます。このコマンドを見てください。

[email protected] ~/Documents $ scp -c 3des Label.pdf [email protected]:.

[email protected]'s password:
Label.pdf 100% 3672KB 282.5KB/s 00:13

上記のコマンドは、ファイルを暗号化するために3desアルゴリズムを使用するようにSCPに指示します。このパラメータは「-C」ではなく「-c」を使用していることに注意してください。

帯域幅の使用を制限する

役立つ可能性のあるもう1つのパラメーターは、「-l」パラメーターです。 「-l」パラメータは、使用する帯域幅を制限します。自動化スクリプトを実行して大量のファイルをコピーする場合に役立ちますが、SCPプロセスによって帯域幅が消費されることは望ましくありません。

[email protected] ~/Documents $ scp -l 400 Label.pdf [email protected]:.

[email protected]'s password:
Label.pdf 100% 3672KB 50.3KB/s 01:13

「-l」パラメータの背後にある400の値は、SCPプロセスの帯域幅を50KB /秒に制限することを意味します。帯域幅はキロビット/秒(kbps)で指定されていることを覚えておいてください。これは、8ビットが1バイトに等しいことを意味します。

SCPはキロバイト/秒(KB /秒)でカウントされます。したがって、SCPの帯域幅を最大50 KB/sに制限する場合は、50 x 8 u003d 400に設定する必要があります。

SCPで使用する特定のポートを指定します

通常、SCPはデフォルトポートとしてポート22を使用しています。ただし、セキュリティ上の理由から、ポートを別のポートに変更することができます。たとえば、ポート2249を使用しています。この場合、コマンドは次のようになります。

[email protected] ~/Documents $ scp -P 2249 Label.pdf [email protected]:.

[email protected]'s password:
Label.pdf 100% 3672KB 262.3KB/s 00:14

「p」は保存された時間とモードにすでに使用されているため、「p」ではなく大文字の「P」を使用していることを確認してください。

ディレクトリ内のファイルを再帰的にコピーする

ディレクトリとその中のすべてのファイル/ディレクトリをコピーする必要がある場合があります。 1つのコマンドで実行できればより良いでしょう。 SCPは、「-r」パラメーターを使用してそのシナリオをサポートします。

[email protected] ~/Documents $ scp -r documents [email protected]:.

[email protected]'s password:
Label.pdf 100% 3672KB 282.5KB/s 00:13
scp.txt 100% 10KB 9.8KB/s 00:00

コピープロセスが完了すると、宛先サーバーに、すべてのファイルを含む「documents」という名前のディレクトリがあります。 「ドキュメント」フォルダが自動的に作成されます。

プログレスメーターと警告/診断メッセージを無効にする

SCPからの進行状況メーターと警告/診断メッセージを表示しないことを選択した場合は、「-q」パラメーターを使用して無効にすることができます。これが例です。

[email protected] ~/Documents $ scp -q Label.pdf [email protected]:.

[email protected]'s password:
[email protected] ~/Documents $

ご覧のとおり、パスワードを入力した後は、SCPプロセスに関する情報はありません。プロセスが完了すると、プロンプトが再び表示されます。

プロキシ経由でSCPを使用してファイルをコピーする

プロキシサーバーは通常、オフィス環境で使用されます。本来、SCPはプロキシ設定されていません。プロキシを使用している環境では、プロキシと通信するようにSCPに「指示」する必要があります。

これがシナリオです。プロキシアドレスは10.0.96.6、プロキシポートは8080です。プロキシはユーザー認証も実装しました。まず、「〜/ .ssh/config」ファイルを作成する必要があります。次に、このコマンドをその中に入れます。

ProxyCommand /usr/bin/corkscrew 10.0.96.6 8080 %h %p ~/.ssh/proxyauth

次に、を含むファイル「〜/ .ssh/proxyauth」を作成する必要があります。

myusername:mypassword

その後、通常どおりSCPを透過的に実行できます。

コルク栓抜きがまだシステムにインストールされていない可能性があることに注意してください。 Linux Mintでは、標準のLinux Mintインストール手順を使用して、最初にインストールする必要があります。

$ apt-get install corkscrew

他のyumベースのシステムの場合、ユーザーは次のyumコマンドを使用してコルク栓抜きをインストールできます。

# yum install corkscrew

「〜/ .ssh/proxyauth」ファイルには「ユーザー名」と「パスワード」がクリアテキスト形式で含まれているため、ファイルにアクセスできるのは自分だけであることを確認してください。

別のssh_configファイルを選択します

会社のネットワークとパブリックネットワークを頻繁に切り替えるモバイルユーザーの場合、SCPの設定を常に変更するのは困難です。ニーズに合わせて別のssh_configファイルを配置できるとよいでしょう。

プロキシは会社のネットワークで使用されていますが、パブリックネットワークでは使用されておらず、定期的にネットワークを切り替えています。

[email protected] ~/Documents $ scp -F /home/pungki/proxy_ssh_config Label.pdf

[email protected]:.
[email protected]'s password:
Label.pdf 100% 3672KB 282.5KB/s 00:13

デフォルトでは、ユーザーごとの「ssh_config」ファイルは「〜/ .ssh/config」に配置されます。プロキシ互換の特定の「ssh_config」ファイルを作成すると、ネットワーク間の切り替えが簡単になります。

会社のネットワークを使用している場合は、「-F」パラメータを使用できます。パブリックネットワークを使用している場合は、「-F」パラメータをスキップできます。

SCPについては以上です。詳細については、SCPのマニュアルページを参照してください。コメントや提案をお気軽に残してください。