scp command – Secure copy

scp (Secure Copy) は、ホスト間でファイルをコピーまたは転送するコマンドライン・ツールです。 ssh プログラムと同じようなセキュリティ機構を使用しています。

実際、ファイル転送を行うためにバックグラウンドで ssh 接続を使用します。 scp とは、安全なコピーがどのように機能すべきかを定義する「プロトコル」と、 OpenSSH ツール群の一部としてインストールされている「プログラム」 (コマンド) の両方を指します。

このクイックチュートリアルでは、scp コマンドのいくつかの例と、それがどのように安全なファイル転送に使用できるかを見ていきます。

scp のインストール方法

scp は通常、ほとんどの Linux ディストロで openssh パッケージの一部としてデフォルトでインストールされます。 例えば、ubuntu/debian では、openssh-client パッケージが scp プログラムを提供します。

$ dpkg -L openssh-client | grep scp/usr/bin/scp/usr/share/man/man1/scp.1.gz

その OpenSSH パッケージは ssh, scp, sftp プログラムと他の多くのツールを提供します。

Using scp – basic syntax

scp の基本的な構文は、覚えるのが非常に簡単です。 それは次のようになります。

$ scp source_file_path destination_file_path

ホストによっては、ファイル パスに、ディレクトリ パスと一緒に完全なホスト アドレス、ポート番号、ユーザー名、パスワードを含める必要があります。

つまり、ローカル マシンからリモート マシンにファイルを「送信」する場合 (アップロード)、構文は次のようになります。

$ scp ~/my_local_file.txt _host.com:/some/remote/directory

リモート ホストからローカル ホストにファイルをコピーする場合 (ダウンロード)、その逆

$ scp _host.com:/some/remote/directory ~/my_local_file.txt# just download the file$ scp :/some/path/file.txt .

以上が、通常のタスクでの scp の使用方法となります。 それとは別に、scp がサポートする追加オプションや関数がいくつかあります。

そして、そうです、デフォルトでは、scp は常に宛先のファイルを上書きします。 それを避ける必要がある場合は、rsync と呼ばれるより強力なツールを使用してください。

scp コマンドの例

1. 冗長出力

冗長出力では、scp プログラムはバックグラウンドで何を行っているかについての多くの情報を出力するでしょう。 これは、プログラムが失敗したり、リクエストを完了できなかったりしたときに、しばしば役に立ちます。

$ scp -v ~/test.txt :/root/help2356.txtExecuting: program /usr/bin/ssh host 192.168.1.3, user root, command scp -v -t /root/help2356.txtOpenSSH_6.2p2 Ubuntu-6ubuntu0.1, OpenSSL 1.0.1e 11 Feb 2013debug1: Reading configuration data /home/enlightened/.ssh/configdebug1: Reading configuration data /etc/ssh/ssh_configdebug1: /etc/ssh/ssh_config line 19: Applying options for *debug1: Connecting to 192.168.1.3 port 22.debug1: Connection established...... OUTPUT TRUNCATED

出力は大きく、接続がどのように行われたか、どの設定ファイルと ID ファイルが使用されているかなど、詳細な情報を含んでいます。

2. 複数のファイルを転送する

複数のファイルをスペースで区切って指定する

$ scp foo.txt bar.txt :/path/directory/

リモートホストから現在のローカルディレクトリに複数のファイルをコピーする

$ scp :/path/directory/\{foo.txt,bar.txt\} .$ scp :~/\{abc.log,cde.txt\} .

3.複数のファイルを転送する

複数のファイルをスペースで区切って指定する

$ scp foo.txt bar.txt :/path/directory/

3. ディレクトリ全体をコピーする(再帰的)

あるホストから別のホストへディレクトリ全体をコピーするには、r スイッチを使用してディレクトリを指定します

$ scp -v -r ~/Downloads :/root/Downloads

4. 2 つのリモートホストにまたがってファイルをコピーする

Scp は 1 つのリモートホストから別のリモートホストへファイルをコピーできます

$ scp :/some/remote/dir/foobar.txt :/some/remote/dir/

5.リモートホストから別のホストへファイルをコピーするには、r スイッチを使用してディレクトリを指定します

5. 圧縮で転送を高速化

時間と帯域幅を節約するために転送を高速化する超クールなオプションです。 必要なのは、C オプションを使用して圧縮を有効にすることだけです。 ファイルはその場で圧縮され、転送先で解凍されます。

$ scp -vrC ~/Downloads :/root/Downloads

上の例では、圧縮を有効にしてディレクトリ全体を移動させました。

6. 帯域幅の使用を制限する

scp に利用可能な帯域幅をすべて使用させたくない場合は、l オプションを使って最大速度を Kbit/s で制限してください。 リモートホストの異なるポート番号に接続する

リモートサーバが異なるポート (デフォルトは 22) で ssh デーモンを実行している場合、’-P’ オプションを使ってその特定のポート番号を使用するように scp に指示する必要があります。 ファイルの属性を保持する

‘-p'(小文字) オプションは、元のファイルから変更時間、アクセス時間、モードを保持しています。 クワイエットモード

クワイエットモード(‘-q’オプション)では、scp出力は抑制され、プログレスメーターや警告・診断メッセージは無効になります。 ID ファイルの指定

鍵ベース (パスワードなし) 認証を使用する場合、秘密鍵を含む ID ファイルを指定する必要があります。 このオプションは ssh コマンドに直接渡され、同じように動作します。

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

11. 別の ssh_config ファイルを使用する

別の ssh_config ファイルを指定するには ‘-F’ オプションを使用します.

$ scp -vC -F /home/user/my_ssh_config ~/test.txt :/some/path/test.txt

12. 別の暗号を使用する

ScpはデフォルトでAES暗号/暗号を使用します。 時には、別の暗号を使用したい場合があります。 異なる暗号を使用することで、転送処理を高速化することができます。 たとえば、blowfish と arcfour は AES よりも高速であることが知られています (ただし、安全性は劣ります)。

$ scp -c blowfish -C ~/local_file.txt :/remote/path/file.txt

上記の例では、圧縮とともに blowfish 暗号を使用しています。

概要

scp は安全にファイルを転送するのに非常に効率的ですが、ファイル同期ツールの必要な機能が欠けています。 より強力なツールは Rsync で、scp のすべての機能を備えているだけでなく、2 つのホスト間でファイルをインテリジェントに同期させるためのより多くの機能を追加しています。 たとえば、変更されたファイルのみをチェックしアップロードしたり、既存のファイルを無視したりすることができます。