ssh ファイル転送(SCP):コマンドとオプションまとめ
SCP とは
scp(Secure Copy)はSSHを使ってローカルとリモートサーバー間でファイルを転送するコマンドです。通信が暗号化されており、SSH鍵認証もそのまま使えます。
基本的な書き方
scp [オプション] 転送元 転送先
リモートのパスは user@host:パス の形式で指定します。
ローカル → リモート(アップロード)
ファイルを転送する
scp ./file.txt user@example.com:/home/user/
# ファイル名を変えて転送 scp ./file.txt user@example.com:/home/user/renamed.txt
ディレクトリごと転送する(-r)
scp -r ./dist/ user@example.com:/var/www/html/
-r で再帰的にディレクトリをコピーします。
リモート → ローカル(ダウンロード)
ファイルをダウンロードする
scp user@example.com:/var/log/app.log ./
ディレクトリごとダウンロードする
scp -r user@example.com:/var/www/html/ ./backup/
よく使うオプション
ポートを指定する(-P)
SSHポートが22以外の場合は -P で指定します(ssh コマンドの -p と違い大文字です)。
scp -P 2222 ./file.txt user@example.com:/home/user/
秘密鍵を指定する(-i)
scp -i ~/.ssh/id_ed25519_work ./file.txt user@example.com:/home/user/
転送速度を制限する(-l)
帯域を制限したい場合は -l でKbps単位で指定します。
# 1Mbps に制限 scp -l 1000 ./largefile.tar.gz user@example.com:/home/user/
圧縮して転送する(-C)
テキストファイルなど圧縮効果が高いファイルに有効です。
scp -C ./logs/ user@example.com:/backup/
~/.ssh/config のエイリアスを使う
~/.ssh/config に設定済みのホストエイリアスがそのまま使えます。
# config に `myserver` が設定されている場合 scp ./file.txt myserver:/home/user/ scp -r myserver:/var/log/ ./logs/
毎回ユーザー名・ホスト名・ポート・鍵を指定しなくて済みます。
リモート → リモート
サーバー間でファイルを直接転送することもできます。
scp user@server1.example.com:/data/file.txt user@server2.example.com:/data/
よく使うオプション早見表
| オプション | 説明 |
|---|---|
-r |
ディレクトリを再帰的にコピー |
-P port |
ポートを指定(大文字のP) |
-i key |
秘密鍵を指定 |
-l kbps |
転送速度を制限(Kbps) |
-C |
圧縮して転送 |
-v |
詳細ログを表示(デバッグ用) |
まとめ
# ローカル → リモート scp ./file.txt user@example.com:/home/user/ # ディレクトリごとアップロード scp -r ./dist/ user@example.com:/var/www/html/ # リモート → ローカル scp user@example.com:/var/log/app.log ./ # ポート指定 scp -P 2222 ./file.txt user@example.com:/home/user/ # config のエイリアスを使う scp ./file.txt myserver:/home/user/
SSH接続の設定(config・鍵認証・ssh-agent)は「SSH 入門:接続・鍵認証・config ファイルの設定」を参照してください。