はじめに
こんにちは!今回はscpコマンドについて解説します。
scpはSSH経由で安全にファイルを転送するコマンド。ローカル↔リモート、さらにはリモート↔リモート間のファイル転送ができます。
cpのSSH版ってイメージですね。セキュアでシンプルだから、ファイル転送の定番です。
scpコマンドとは
scpは"Secure Copy"の略で、SSHプロトコルを使用して安全にファイルを転送する外部コマンドです。
昔のrcp(Remote Copy)と違い、通信内容が暗号化されます。リモートサーバーとのファイル転送、バックアップ、設定ファイルの配置など、様々な場面で活躍します。
基本構文
|
|
ローカルファイルは通常のパス、リモートファイルはuser@host:path形式で指定します。
主なオプション
| オプション | 説明 |
|---|---|
-r |
ディレクトリを再帰的にコピー |
-p |
ファイルの属性(タイムスタンプ・権限)を保持 |
-P |
ポート番号を指定(大文字) |
-C |
圧縮を有効にする |
-v |
詳細表示(verbose) |
-i |
秘密鍵ファイルを指定 |
-o |
SSHオプション設定 |
-3 |
2つのリモートホスト間でコピー(経由ホストを明示) |
使用例
例1: ローカルからリモートにファイルをコピー
|
|
実行結果:
|
|
ローカルのfile.txtをリモートホストの/home/user/にコピーします。進捗バーが表示されます。
例2: リモートからローカルにファイルをコピー
|
|
実行結果:
|
|
リモートホストの/var/log/app.logをローカルの現在ディレクトリにコピーします。
例3: リモートからリモートにファイルをコピー
|
|
実行結果:
|
|
2つのリモートホスト間でファイルを転送。ローカルマシンを経由して転送されます。
例4: ディレクトリ全体をコピー(再帰的)
|
|
実行結果:
|
|
リモートディレクトリをローカルにコピー。ディレクトリ構造は保持されます。
例5: ファイル属性を保持してコピー
|
|
実行結果:
|
|
-pオプションでタイムスタンプと権限を保持。バックアップ用途に便利です。
例6: 非標準ポートを使用
|
|
実行結果:
|
|
SSHがポート2222で動作している場合に使用します。注意:-Pは大文字です。
例7: 秘密鍵を指定してコピー
|
|
実行結果:
|
|
秘密鍵ベースの認証を使用。パスワード入力なしでコピーできます。
例8: 複数ファイルをコピー
|
|
実行結果:
|
|
複数ファイルをまとめてコピー。各ファイルの進捗が表示されます。
例9: ワイルドカードを使用(ローカル → リモート)
|
|
実行結果:
|
|
*.logにマッチするすべてのファイルをコピー。
例10: 圧縮転送で遅い接続を高速化
|
|
実行結果:
|
|
-Cオプションで転送を圧縮。特に遅いネットワークで効果的です。
Tips・注意点
ポート番号は大文字の-Pを使う
-pは属性保持、-Pはポート番号指定という別の機能です。混同しないように注意。
|
|
両方使う場合は上記のように組み合わせます。
リモート→リモート転送のパスワード入力
リモート→リモート転送時は両ホストのパスワードが求められます。秘密鍵認証の設定があると便利です。
ワイルドカードはローカル側でのみ展開
|
|
リモート側のワイルドカードを使う場合はコマンド実行で対応:
|
|
大きなディレクトリはcompressオプションで時間短縮
|
|
ネットワーク帯域幅が限られている場合、圧縮が有効です。
実践的な使い方
例1: サーバーのバックアップを定期的に取得
|
|
日付付きファイル名でバックアップを自動取得。cronに組み込めます。
例2: ローカルのログファイルを中央サーバーに集約
|
|
複数サーバーのログを中央管理サーバーに集約。スクリプト内で活用します。
例3: デプロイ用に複数ファイルを転送
|
|
ビルド結果をデプロイサーバーに一括転送。CI/CDパイプラインに組み込めます。
例4: リモート間でのデータベースダンプ転送
|
|
圧縮してデータベースダンプを転送。ストレージスペース節約に効果的。
まとめ
scpコマンドのポイント:
- SSHプロトコルを使用した安全なファイル転送
- 基本形:
scp file user@host:path - リモート→ローカル:
scp user@host:path ./ - リモート→リモート:
scp user1@host1:path user2@host2:path - 再帰コピー:
scp -r(ディレクトリ用) - ポート指定:
scp -P ポート番号(大文字!) - 属性保持:
scp -p(バックアップ用) - 秘密鍵:
scp -i ~/.ssh/id_rsa - 圧縮:
scp -C(遅い接続向け)
scpはシンプルで強力。スクリプトやcronでの自動ファイル転送に最適です。ssshh経由だから暗号化されて安心ですよ!