ネットワーク・通信

Linux scpコマンド入門|SSH経由でファイルを転送する

Linux scp ネットワーク

Linux scpコマンド入門
SSH経由でファイルを転送する

scpは、SSH接続を利用してローカルとリモートサーバー間でファイルを安全にコピーするコマンドです。暗号化された通信でファイル転送を行えます。

こんな人向けの記事です

  • サーバーにファイルをアップロード・ダウンロードしたい人
  • SSH経由で安全にファイルを転送したい人
  • ディレクトリごとまとめて転送したい人

Step 1scpの基本的な使い方

scpの基本構文は scp [送信元] [送信先] です。リモート側は ユーザー名@ホスト名:パス の形式で指定します。

ターミナル
# ローカル → リモート(アップロード)
scp file.txt username@hostname:/home/username/

# リモート → ローカル(ダウンロード)
scp username@hostname:/var/log/app.log ./

# リモートのファイルを別名で保存
scp username@hostname:/etc/nginx/nginx.conf ./nginx_backup.conf

Step 2よく使うオプション

scpの主要なオプション一覧です。

オプション説明
-rディレクトリを再帰的にコピー
-Pポート番号を指定(大文字P)
-i秘密鍵ファイルを指定
-pタイムスタンプとパーミッションを保持
-C転送データを圧縮
-q進捗表示を非表示
ポート指定は大文字 -P

sshコマンドのポート指定は小文字 -p ですが、scpでは大文字 -P です。よく間違えるポイントなので注意してください。

Step 3ディレクトリの転送

ディレクトリごと転送するには -r オプションを使います。

ターミナル
# ディレクトリをアップロード
scp -r ./myproject username@hostname:/home/username/

# ディレクトリをダウンロード
scp -r username@hostname:/var/www/html ./backup/

# 複数ファイルを一度に転送
scp file1.txt file2.txt username@hostname:/tmp/

# ワイルドカードで転送
scp username@hostname:/var/log/*.log ./logs/

Step 4SSH configとの連携

~/.ssh/config に設定があれば、scpでもその名前を使えます。

ターミナル
# SSH configが設定済みなら短い名前で転送
scp file.txt myserver:/home/alice/
scp -r ./deploy myserver:/var/www/

# ポートや鍵の指定も不要になる
scp production:/var/log/app.log ./

Step 5実践的な活用例

日常的なサーバー管理でよく使うscpのパターンです。

ターミナル
# 設定ファイルのバックアップ
scp myserver:/etc/nginx/nginx.conf ./backup/nginx.conf.bak

# デプロイ(ファイルをサーバーに配置)
scp -r ./dist/* myserver:/var/www/html/

# サーバー間のファイル転送
scp server1:/data/backup.tar.gz server2:/data/

# 大きなファイルを圧縮して転送
scp -C large_file.dat myserver:/tmp/
大量のファイル転送にはrsyncが最適

scpは小規模なファイル転送に向いています。大量のファイルや差分転送が必要な場合は rsync コマンドの方が効率的です。rsyncは変更があったファイルだけを転送できます。