SCP を使ってファイルやディレクトリを安全に転送する方法

Suraj Joshi 2023年1月30日
  1. SCP コマンド
  2. scp を用いたファイルやディレクトリの転送
SCP を使ってファイルやディレクトリを安全に転送する方法

SCP (別名 secure copy) は、ファイルやディレクトリをローカルからリモートシステムに転送するためのコマンドラインユーティリティであり、その逆も可能です。また、2つのリモートシステム間でファイルやディレクトリを転送することもできます。ファイルとパスワードは転送中に暗号化されるので、より安全な転送方法となります。

SCP コマンド

構文

scp [OPTION] [user@]SRC_HOST:]file1 [user@]DEST_HOST:]file2

フラグ

  • OPTION:暗号、ssh 設定、ssh ポート、制限、再帰的コピーなどの scp オプションを表します。
  • [user@]SRC_HOST:]file1: コピー元のファイルまたはディレクトリ
  • [user@]DEST_HOST:]file2: ソースファイルまたはディレクトリをコピーするディレクトリへのパスです。

scp は転送を制御するための様々なオプションを提供します。最も広く使われているオプションは以下の通りです。

-P リモートホストの ssh ポートを指定
-p ファイルの変更やアクセス時間を保存します。
-q プログレスメーターとエラーメッセージを抑制
-C 転送中にデータを圧縮
-r ファイルを再帰的にコピーします。

scp コマンドを使用する際に注意すべきこと

  1. このコマンドは ssh キーまたはパスワードを用いてリモートシステムを認証します。
  2. リモートシステムを : 記号で認識します。
  3. 送信元のファイルやディレクトリの読み取り権限と、送信先のファイルやディレクトリの書き込み権限を確認する必要があります。
  4. scp は警告なしにファイルを上書きします。したがって、両方のシステムで同じ名前と場所を共有するファイルの転送中は注意が必要です。

scp を用いたファイルやディレクトリの転送

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

scp main.py remote_username@11.11.0.200:/Documents/directory

このコマンドはユーザーパスワードの入力を促し、正しいパスワードを入力すると転送が開始されます。

出力:

remote_username@11.11.0.200's password:
main.py                             100%    0     0.0KB/s   00:00

ローカルシステム上のファイル main.py を、ユーザ名 remote_username、IP アドレス 11.11.0.200 のリモートサーバにコピーします。/Documents/directory はファイルのコピー先となるリモートサーバ上のディレクトリを示します。リモートディレクトリが指定されていない場合、ファイルはリモートマシンのホームディレクトリにコピーされます。

リモート上の SSH がデフォルトのポート 22 以外のポートをリッスンしている場合、-P オプションを使ってポートを指定することができます。

scp -P 8080 main.py remote_username@11.11.0.200:/Documents/directory

ローカルシステムからリモートシステムにディレクトリをコピーする

ディレクトリを転送するには scp コマンドで -r 引数を用いなければなりません。

scp -r /Documents/myapp remote_username@11.11.0.200:/Documents/remote_app

ローカルマシンの Documents ディレクトリ内の myapp ディレクトリをリモートマシンの Documents ディレクトリ内の remote_app ディレクトリにコピーします。

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

リモートシステムのファイルをローカルシステムにコピーするには、リモートの場所をソース、ローカルの場所をデスティネーションとして用います。

scp remote_username@11.11.0.200:/remote/main.py /Documents/local

リモートシステムからローカルシステムにファイル main.py をコピーします。

あるリモートシステムから別のリモートシステムへファイルをコピーする

scp userA@11.11.0.200:/host1/main.py userB@11.11.0.205:/host2

このコマンドは、リモートホストの IP アドレス 11.11.0.200 のファイル /host1/main.py を、IP アドレス 11.11.0.205 のホストのディレクトリ host2 にコピーします。

コマンドが発行されたマシンを経由してトラフィックをルーティングするには、scp コマンドに -3 オプションを追加します。

scp -3 userA@11.11.0.200:/host1/main.py userB@11.11.0.205:/host2
著者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

関連記事 - Linux Files and Directories