LinuxでSCPコマンドを使用する方法

scpコマンドを使用してLinuxシステムからリモートシステムにファイルを転送するのに役立つ簡単なチュートリアル。

SCPは「セキュアコピー」の略です。 scp Linuxが提供するコマンドラインユーティリティで、安全でないネットワークを介して、あるマシンから別のマシンにファイルやディレクトリを転送できます。

あるシステムから別のシステムにファイルをコピーする場合は、 scp ファイルとディレクトリを安全に転送するための非常に優れたオプションです。 2台の通信マシンが同じネットワークを介して接続されている場合、 scp 可能になります。

あなたは大きく依存することができます scp 転送されるファイルと転送に使用されるパスワードの両方が暗号化されるため、機密性と整合性のためのコマンド。この転送の進行中に誰かがトラフィックをスヌープしようとしても、機密情報は公開されません。

このチュートリアルでは、さまざまな例を見ていきます。 scp 指図。また、頻繁に使用されるオプションのいくつかを見ていきます。 scp 指図。

scpコマンドの使用を開始する

を使用して scp ファイル/ディレクトリを転送できるコマンド:

  • ローカルマシンからリモートマシンへ。
  • 2台のリモートマシン間。
  • リモートマシンからローカルマシンへ。

一般的な構文:

scp [オプション] [source_file_name] [user @ destination_Host]:destination_folder

このコマンドの基本的な属性を1つずつ理解していきましょう。

  • [source_file_name] これは、コピーするソースファイルです。
  • [user @ destination_Host] これは、ファイルをコピーするリモートシステムのユーザー名です。リモートマシンのIPアドレスは、この属性で「@‘記号。
  • [移動先フォルダ] これは、コピーしたファイルを保存するディレクトリです。

ノート: コロン(:)記号は、ローカルとリモートの場所を区別するため、構文で使用されます。コロンを使用します(:)リモートシステムを使用して、ファイルのコピー先のディレクトリを指定します。ターゲットディレクトリを指定しない場合、ファイルはリモートシステムユーザーのホームディレクトリにコピーされます。

で使用されるオプション scp

で使用される最も人気のあるオプションのいくつか scp コマンドは以下のとおりです。

オプション説明
-Cファイルの圧縮を転送できるようにする
-v詳細な出力を与える
-rファイルとディレクトリを再帰的にコピーする
-pファイルのアクセス許可、モード、アクセス時間を保持する
-Pによって使用されるデフォルトのポートを変更します scp 指図

これらのオプションの例については、チュートリアルで詳しく説明します。

ローカルシステムからリモートシステムへのファイルのコピー

scp 次の構文を使用して、ローカルシステムからリモートシステムにファイルを転送できます。これにより、ファイルをリモートに配置されたサーバーに転送またはアップロードできます。

一般的な構文:

scp [file_name] remote_user @ host:[destination_folder]

例:

scp apache-tomcat-9.0.8.tar.gz [email protected]:gaurav

この例では、ファイル「apache-tomcat-9.0.8.tar.gz」をローカルシステムからIPアドレスが「143.110.178.221」のリモートシステムにコピーしています。

リモートシステムでは、ファイルは「gaurav」という名前のディレクトリにコピーされます。

出力:

gaurav @ ubuntu:〜$ scp apache-tomcat-9.0.8.tar.gz [email protected]:gaurav [email protected]のパスワード:apache-tomcat-9.0.8.tar.gz 100%9589KB 79.8KB / s 02:00 gaurav @ ubuntu:〜$ 

リモートシステムの出力でファイルを確認してみましょう。

root @ ubuntu-s-1vcpu-1gb-blr1-01:〜/ gaurav#ls apache-tomcat-9.0.8.tar.gz root @ ubuntu-s-1vcpu-1gb-blr1-01:〜/ gaurav#

したがって、ファイルは、を使用してリモートシステムに正常にコピーされます。 scp 指図。

複数のファイルをリモートシステムにコピーする

前の例では、を使用してファイルをリモートシステムに転送する方法を学びました。 scp 指図。このコマンドを使用して、ローカルシステムからリモートシステムに複数のファイルを転送する方法を確認します。

一般的な構文:

scp [ファイル1] [ファイル2] [ファイルn] remote_username @ remote_host:[特定のディレクトリ]

この簡単なプロセスを例を挙げて理解しましょう。

例:

scp ath.html abc.txt ppa-purge_0.2.8 + bzr56_all.deb [email protected]:gaurav

ここでは、リモートシステムにコピーするコマンドに複数のファイルが記載されています。

出力:

gaurav @ ubuntu:〜$ scp ath.html abc.txt ppa-purge_0.2.8 + bzr56_all.deb [email protected]:gaurav [email protected]のパスワード:ath.html 100%199KB 94.7KB / s 00: 02 abc.txt 100%0 0.0KB / s 00:00 ppa-purge_0.2.8 + bzr56_all.deb 100%4360 42.2KB / s 00:00 gaurav @ ubuntu:〜$

リモートシステムの場合:

root @ ubuntu-s-1vcpu-1gb-blr1-01:〜/ gaurav#ls -l total 9800 -rw-r--r-- 1 root root 0 Oct 5 08:58 abc.txt -rw-r-- r-- 1 root root 9818695 Oct 5 08:35 apache-tomcat-9.0.8.tar.gz -rw-r--r-- 1 root root 204057 Oct 5 08:58 ath.html -rw-r-- r--1ルートルート436010月5日08:58ppa-purge_0.2.8 + bzr56_all.deb root @ ubuntu-s-1vcpu-1gb-blr1-01:〜/ gaurav#

これで、3つのファイルすべてがリモートシステムにコピーされます。

ディレクトリをリモートシステムにコピーする

使用できます scp ローカルシステムからリモートシステムにディレクトリをコピーするコマンド。このプロセスは、ファイルをコピーするプロセスと似ています。ディレクトリの内容もコピーするには、 -r オプションと scp 指図。

The -r オプションは、ディレクトリを再帰的にコピーするために使用されます。つまり、ディレクトリ内のすべてのサブフォルダとファイルもコピーされます。

一般的な構文:

scp -r [ディレクトリパス] remote_username @ remote_host:[target_directory]

例:

scp -r PycharmProjects [email protected]:gaurav

出力:

gaurav @ ubuntu:〜$ scp -r PycharmProjects [email protected]:gaurav [email protected]のパスワード:__ main __。py100%623 7.8KB / s 00:00 __init __。py100%23 0.4KB / s 00 :00 complete.py 100%2929 28.1KB / s 00:00 search.py​​ 100%4728 38.7KB / s 00:00 Uninstall.py 100%2963 32.5KB / s 00:00 hash.py 100%1681 21.3KB / s 00:00 check.py 100%1430 16.8KB / s 00:00 configuration.py 100%7125 50.4KB / s 00:00 show.py 100%6289 49.8KB / s 00:00 download.py 100%6623 48.2 KB / s 00:00 gaurav @ ubuntu:〜$ 

を使用して -r オプションと scp コマンドは、ディレクトリ内のすべてのサブフォルダとファイルをローカルマシンからリモートシステムにコピーします。

scpプロセスに関する詳細情報の表示

あなたは使用することができます -v (小文字 v)リモートシステムまたはローカルシステムのいずれかにコピーされているファイルに関する情報を表示するオプション。このタイプの出力は、冗長出力とも呼ばれます。

このオプションを使用すると、ファイルに関する完全なデバッグ情報が画面に表示されます。

一般的な構文:

scp -v [file_name] user_name @ user_host:

例:

scp -v apache-tomcat-9.0.8.tar.gz [email protected]:team

出力:

gaurav @ ubuntu:〜$ scp -v apache-tomcat-9.0.8.tar.gz [email protected]:team実行中:プログラム/ usr / bin / sshホスト159.89.170.11、ユーザーroot、コマンドscp -v -tチームOpenSSH_7.6p1Ubuntu-4ubuntu0.3、OpenSSL 1.0.2n 2017年12月7日debug1:構成データの読み取り/home/gaurav/.ssh/config debug1:構成データの読み取り/ etc / ssh / ssh_config debug1:/ etc / ssh / ssh_config 19行目:* debug1のオプションの適用:159.89.170.11 [159.89.170.11]ポート22への接続。debug1:接続が確立されました。 debug1:key_load_public:そのようなファイルまたはディレクトリはありませんdebug1:IDファイル/home/gaurav/.ssh/id_rsaタイプ-1 apache-tomcat-9.0.8.tar.gz 100%9589KB 99.8KB / s 01:36 debug1:client_input_channel_req:チャネル0rtype終了ステータス応答0debug1:チャネル0:空き:クライアントセッション、nchannels 1 debug1:fd 0クリアO_NONBLOCKdebug1:fd 1クリアO_NONBLOCK転送:送信9826736、受信4016バイト、97.2秒バイト/秒:送信101133.9、受信41.3 debug1:終了ステータス0 gaurav @ ubuntu:〜$ 

ここで、出力では、ファイルのデバッグ情報が端末に表示されていることがわかります。 scp コマンドは、 -v オプション。

2つのリモートホスト間でのファイルの転送

Linuxでは、複数のリモートホストに接続できます。を使用して、2つのリモートホスト間でファイルとディレクトリを転送できます。 scp 指図。

一般的な構文:

scp remote_user_1 @ host_1:/ [file_name] remote_user_2 @ host_2:[folder_to_save]

構文は少し広いように見えるかもしれませんが、かなり単純です。ここで、コマンドの最初の部分は、ファイルのコピー元のリモートユーザーに関する入力を提供します。コロン(:)および / 2台のリモートマシン間で転送されるファイル名またはディレクトリ名を指定するために使用されます。

2番目の部分は、ファイルがコピーされるターゲットリモートシステムに関する情報を提供します。

例:

scp -r [email protected]:gaurav [email protected]:/ team

ここでは、「gaurav」という名前のディレクトリをローカルシステムからリモートシステムに再帰的にコピーします。ファイルは、リモートシステムの「チーム」フォルダにコピーされます。

出力:

gaurav @ ubuntu:〜$ scp -r [email protected]:/ gaurav [email protected]:/ team [email protected]のパスワード:1.py 100%134 261.3KB / s 00:00variables.py 100%377 949.2KB / s 00:00 abc.txt 100%0 0.0KB / s 00:00 ath.html 100%199KB 41.8MB / s 00:00 gaurav @ ubuntu:〜$

ここでは、 scp ローカルシステムでコマンドを実行して、「gaurav」という名前のディレクトリをあるリモートサーバーから別のリモートサーバーに転送します。

リモートシステムからローカルシステムにファイルを転送する

を使用して、リモートシステムからローカルシステムにファイルまたはディレクトリを簡単に転送できます。 scp 指図。簡単に言うと、複数のファイルまたはディレクトリをリモートサーバーからローカルシステムにダウンロードできます。 scp 指図。

一般的な構文:

scp remote_username @ user_host:/files/file.txt / [folder_of_local_system]

出力:

gaurav @ ubuntu:〜$ scp [email protected]:how.txt。 [email protected]のパスワード:how.txt 100%11 0.1KB / s 00:00 gaurav @ ubuntu:〜$

ここでは、リモートサーバーからホームディレクトリにファイルをダウンロード(コピー)しました。したがって、私はドットを使用しました(.)コマンドでファイルをホームディレクトリにコピーするように指定します。

サンプル出力:

gaurav @ ubuntu:〜$ ls -l how.txt -rw-r--r-- 1 gaurav gaurav 11 Oct 6 09:49 how.txt gaurav @ ubuntu:〜$ 

ここで、ファイルがリモートサーバーからホームディレクトリにコピーされます。

同様に、を使用してリモートサーバーから複数のファイルまたはディレクトリをダウンロードできます。 scp 適切なオプションを指定してコマンドを実行します。

ファイルを圧縮して転送を高速化

大きなファイルの転送には時間がかかる場合があります。この問題は、 scp とのコマンド -C (大文字 C) オプション。

を使用して -C オプションで、より大きなサイズのファイルを圧縮して、転送を高速化し、時間を節約します。

このオプションの興味深い事実の1つは、ファイルが宛先システムに元のサイズでコピーされますが、転送プロセス中にサイズが圧縮されて、より高速な転送が可能になることです。したがって、圧縮はネットワーク上でのみ実行されます。

一般的な構文:

scp -C [file_name] user_name @ user_host:[target_folder]

違いを理解するために比較例を見てみましょう。

-Cオプションなしで転送:

gaurav @ ubuntu:〜$ scp -rv dlink [email protected]:team実行中:プログラム/ usr / bin / sshホスト68.183.82.183、ユーザーroot、コマンドscp -v -r -t team OpenSSH_7.6p1Ubuntu-4ubuntu0。 3、OpenSSL 1.0.2n 2017年12月7日debug1:構成データの読み取り/home/trinity/.ssh/config debug1:構成データの読み取り/ etc / ssh / ssh_config debug1:/ etc / ssh / ssh_config行19:* debug1のオプションの適用:68.183.82.183 [68.183.82.183]ポート22に接続しています。debug1:接続が確立されました。 debug1:client_input_channel_req:channel 0 rtype exit-status reply 0 debug1:channel 0:free:client-session、nchannels 1 debug1:fd 0 clearing O_NONBLOCK debug1:fd 1 clearing O_NONBLOCK Transferd:送信7516504、受信4008バイト、74.6秒バイト1秒あたり:送信100693.7、受信53.7 debug1:終了ステータス0 gaurav @ ubuntu:〜$ 

上記の出力から、転送に必要な時間は74.6秒であることがわかります。 -Cオプションを使用して同じファイルを転送してみて、違いを確認します。

-Cオプションを使用した転送:

gaurav @ ubuntu:〜$ scp -Crv dlink [email protected]:team実行中:プログラム/ usr / bin / sshホスト68.183.82.183、ユーザールート、コマンドscp -v -r -t teamOpenSSH_7.6p1Ubuntu-4ubuntu0。 3、OpenSSL 1.0.2n 2017年12月7日debug1:構成データの読み取り/home/trinity/.ssh/config debug1:構成データの読み取り/ etc / ssh / ssh_config debug1:/ etc / ssh / ssh_config行19:* debug1のオプションの適用:68.183.82.183 [68.183.82.183]ポート22に接続しています。debug1:接続が確立されました。 。 。 webupload.img 100%1834KB 98.7KB / s 00:18ファイルモードの送信:C0664 1877552 router.imgシンク:C0664 1877552 router.img router.img 100%1834KB 100.3KB / s 00:18シンク:Eファイルモードの送信:C0664 3754103 DSL-2750U-Release-IN-T-01.00.07.zipシンク:C0664 3754103 DSL-2750U-Release-IN-T-01.00.07.zip DSL-2750U-Release-IN-T-01.00.07.zip 100%3666KB 218.5KB / s 00:16シンク:E debug1:client_input_channel_req:channel 0 rtype exit-status reply 0 debug1:channel 0:free:client-session、nchannels 1 debug1:fd 0 clearing O_NONBLOCK debug1:fd 1 clearing O_NONBLOCK転送:送信7518864、受信3828バイト、51.0秒バイト/秒:送信100245.4、受信51.0 debug1:終了ステータス0 debug1:圧縮送信:生データ7511925、圧縮7513136、係数1.00 debug1:圧縮受信:生データ1467、圧縮999、係数0.68 gaurav @ ubuntu:〜$

ここでは、 -C オプションと scp コマンドを使用すると、ネットワーク経由でファイルを圧縮できるため、時間の節約になります。

ファイル転送に別のsshポートを使用する

使用中 scp デプロイされるデフォルトのポートは ポート22。ユーザーは、このポートの選択を自由にカスタマイズできます。あなたは使用することができます -P (大文字のPオプション) scp 選択したポートを使用するコマンド。

一般的な構文:

cp -P [new_port_number] [file_name / directory_name] remote_user @ host:[destination_folder]

例:

scp -P 4248 dlink [email protected]:team

上記のコマンドを使用して、ファイルはリモートサーバーに転送されます。ただし、今回は使用するポートは ポート4248 デフォルトの代わりに ポート22.

結論

このチュートリアルを終えた後、私たちはの動的な性質について学びました scp あるシステムから別のシステムにファイルを転送またはコピーするために使用されるコマンド。このオプションは、リモートサーバーからファイルまたはディレクトリをダウンロードするためにも使用できます。したがって、次のように結論付けることができます。 scp コマンドは、複数のシステムとリモートサーバーを同時に処理する必要がある場合のファイル転送に非常に役立ちます。