scpコマンド

scpは SSH によって提供されるクライアント プログラムで、2 つのホスト間でファイルを暗号化する (つまり、ファイルをコピーする) ために使用されます。

導入

scp は Secure Copy の略で、cp コマンド + SSH に相当します。最下層は SSH プロトコルで、デフォルトのポートは 22 です。これは、最初にsshコマンドを使用してリモート ホストにログインし、次にコピー操作を実行するのと同じです。

scp は主に以下の 3 つのコピー操作に使用されます。

  • ローカルからリモートにコピーします。
  • リモートからローカルにコピーします。
  • 2 つのリモート システム間のレプリケーション。

scpを使用してデータを転送する場合、ファイルとパスワードは暗号化され、機密情報が漏洩することはありません。

基本的な構文

scp の構文は cp の構文と似ています。

$ scp ソース 宛先

上記のコマンドでは、sourceはファイルの現在の場所、destinationはファイルのコピー先の場所です。ユーザー名とホスト名の両方を含めることができます。

$ scp user@host:foo.txt bar.txt

上記のコマンドは、リモート ホストのユーザーのホーム ディレクトリ (user@host) にある foo.txt を、ローカル マシンのカレント ディレクトリにある bar.txt にコピーします。ご覧のとおり、ホストとファイルを区切るためにコロン (:) が使用されています。

scp は、まず SSH を使用してリモート ホストにログインし、次に暗号化された接続経由でファイルをコピーします。クライアントが接続を開始すると、ユーザーは SSH の使用法と一致するパスワードの入力を求められます。

ユーザー名とホスト名は両方とも省略できます。ユーザー名のデフォルト値はローカル マシンの現在のユーザー名で、ホスト名のデフォルト値は現在のホストです。 scp は SSH クライアントの設定ファイル .ssh/config を使用することに注意してください。ホストのエイリアスが設定ファイルで定義されている場合、ここでの接続にもエイリアスを使用できます。

scp は、複数のファイルの一度のコピーをサポートしています。

$ scp ソース 1 ソース 2 宛先

上記のコマンドは、2 つのファイル source1source2destination にコピーします。

コピーされるファイルが同じ名前で宛先にすでに存在する場合、scp は警告なしに同じ名前のファイルを上書きすることに注意してください。

使用例

(1)ローカル ファイルをリモートにコピーします

ローカルファイルをリモートシステムにコピーする方法は次のとおりです。

# 文法
$ scp SourceFile user@host:directory/TargetFile

# 例
$ scp file.txt remote_username@10.10.0.2:/remote/directory

以下はディレクトリ全体をコピーする例です。

# ローカルのドキュメント ディレクトリをリモート ホストにコピーします。
# ドキュメントディレクトリはリモートホスト上に作成されます
$ scp -r documents username@server_ip:/path_to_remote_directory

#ローカル ディレクトリ全体をリモート ディレクトリにコピーします
$ scp -r localmachine/path_to_the_directory username@server_ip:/path_to_remote_directory/

#ローカル ディレクトリ内のすべてのコンテンツをリモート ディレクトリにコピーします
$ scp -r localmachine/path_to_the_directory/* username@server_ip:/path_to_remote_directory/

(2) リモート ファイルをローカルにコピー

リモートホストからローカルにファイルをコピーする場合の使用方法は次のとおりです。

# 文法
$ scp user@host:directory/SourceFile TargetFile

# 例
$ scp remote_username@10.10.0.2:/remote/file.txt /local/directory

以下はディレクトリ全体をコピーする例です。

#リモート ディレクトリをローカル ディレクトリにコピーします
$ scp -r username@server_ip:/path_to_remote_directory local-machine/path_to_the_directory/

#リモート ディレクトリ内のすべてのコンテンツをローカル ディレクトリにコピーします
$ scp -r username@server_ip:/path_to_remote_directory/* local-machine/path_to_the_directory/
$ scp -r user@host:directory/SourceFolder TargetFolder

(3) リモートホスト間でのファイルコピー

本機がリモートホストAからリモートホストBへコピーを指示する使い方は以下のとおりです。

# 文法
$ scp user@host1:directory/SourceFile user@host2:directory/SourceFile

# 例
$ scp user1@host1.com:/files/file.txt user2@host2.com:/files

両方のリモート アカウントのパスワードを入力するように求められます。データはあるリモート ホストから別のリモート ホストに直接転送されます。

設定項目

(1)-c

-c パラメータは、ファイル コピー データ送信の暗号化アルゴリズムを指定するために使用されます。

$ scp -c blowfish some_file your_username@remotehost.edu:~

上記のコードでは、暗号化アルゴリズムをblowfishとして指定しています。

(2)-C

-C パラメータは、送信中にファイルを圧縮するかどうかを示します。

$ scp -c blowfish -C local_file your_username@remotehost.edu:~

(3)-F

-F パラメータは、ssh で使用する ssh_config ファイルを指定するために使用されます。

$ scp -F /home/pungki/proxy_ssh_config Label.pdf root@172.20.10.8:/root

(4)-i

-i パラメータはキーを指定するために使用されます。

$ scp -vCq -i private_key.pem ~/test.txt root@192.168.1.3:/some/path/test.txt

(5)-l

-l パラメータは、データ送信の帯域幅レートを制限するために使用されます。単位は Kbit/sec です。複数の人が帯域幅を共有する場合、このパラメータにより帯域幅の一部を他の人が使用できるように確保できます。

$ scp -l 80 yourusername@yourserver:/home/yourusername/* .

上記のコードでは、scpコマンドが占有する帯域幅は 80K ビット/秒、つまり 10K バイト/秒に制限されています。

(6)-p

-p パラメータは、変更時刻 (modification time)、アクセス時刻 (access time)、ファイルのステータス (mode) などの元のファイル情報を保持するために使用されます。

$ scp -p ~/test.txt root@192.168.1.3:/some/path/test.txt

(7)-P

-P パラメータは、リモート ホストの SSH ポートを指定するために使用されます。リモート ホストがデフォルトのポート 22 を使用する場合、それを指定する必要はありません。それ以外の場合は、コマンドで -P パラメータを使用して指定する必要があります。

$ scp -P 2222 user@host:directory/SourceFile TargetFile

(8)-q

-q パラメータは、コピーを表示する進行状況バーをオフにするために使用されます。

$ scp -q Label.pdf mrarianto@202.x.x.x:.

(9)-r

-r パラメータは、ディレクトリを再帰的にコピーするかどうかを示します。

(10)-v

-v パラメータは、詳細な出力を表示するために使用されます。

$ scp -v ~/test.txt root@192.168.1.3:/root/help2356.txt

作者: wangdoc

アドレス: https://wangdoc.com/

ライセンス: クリエイティブ・コモンズ 3.0