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
コマンドを使用する際に注意すべきこと
- このコマンドは
ssh
キーまたはパスワードを用いてリモートシステムを認証します。 - リモートシステムを
:
記号で認識します。 - 送信元のファイルやディレクトリの読み取り権限と、送信先のファイルやディレクトリの書き込み権限を確認する必要があります。
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 is a backend software engineer at Matrice.ai.
LinkedIn