Linux / コマンド / scp - SSHでローカル・リモートファイルをコピー
scpはSSHを使用してローカルとリモートシステム間でファイルをコピーします。通常、リモートの場所はユーザー@ホスト:パス形式で表されます。
OpenSSH 9.0以降のscpは、既定でSSH接続上のSFTP(SSH File Transfer Protocol)を使用します。-Oは旧SCPプロトコルへの切り替えです。転送方向はコピー元・コピー先の順序で決まり、:を含むローカル名は./などでローカルパスと明示します。旧プロトコルではリモートシェルによる特殊文字の解釈にも注意が必要です。
基本的な文法
scp [オプション] コピー元 コピー先
インストールされている実装とオプションは、配布版によって異なる場合があります。man scpで現在のシステムの説明を確認してください。
使用例
ローカルファイルをサーバーにコピー
手元にreport.txtを用意し、接続先でSSHとSFTPが利用できること、書き込み権限と空き容量を確認します。ホスト名・ユーザー名・保存先は実際の値に置き換えてください。接続とホストキーの確認はsshの基本とホストキー確認を参照してください。既存ファイルを上書きする可能性があります。
scp report.txt alice@server.example.com:/home/alice/
サーバーファイルをローカルにコピー
リモートファイルを現在のディレクトリに取得します。
scp alice@server.example.com:/home/alice/report.txt .
ディレクトリのコピー
-rでディレクトリ全体を再帰的にコピーします。途中のシンボリックリンクはリンク先をたどるため、想定より広い範囲や大きなデータを転送しないか確認します。
scp -r project/ alice@server.example.com:/home/alice/
転送方向と結果を確認する
scp ローカルファイル ユーザー@ホスト:パスはローカルからリモートへコピーします。以下のサーバー・パスは説明用ですので、実際の権限と保存容量を確認して置き換えてください。
scp report.txt user@server.example.test:/tmp/report.txt
成功時には転送進行状況が表示されるか、出力設定によっては何のメッセージもなく終了する場合があります。ローカル側からssh user@server.example.test 'ls -lh /tmp/report.txt'としてファイル名とサイズを確認してください。
引数に並べたコピー元・コピー先の順序が転送方向を決定します。既存のリモートファイルを上書きする可能性があるため、宛先パスを再確認してください。中断した転送や反復同期には、rsyncによる差分転送が適する場合があります。
主なオプションと形式
| オプション・形式 | 説明 |
|---|---|
-r |
ディレクトリを再帰的にコピーします。 |
-P ポート |
SSHサーバーポートを指定します。sshの-pとは異なり、大文字です。 |
-i 鍵ファイル |
認証に使用する秘密鍵を指定します。 |
-p |
変更時刻・アクセス時刻とファイルモードを保持します。 |
-O |
互換性が必要な場合は、レガシーSCPプロトコルを使用します。 |
使用する際の注意点
対象ファイルが存在する場合は上書きされる可能性があるため、パスとアカウントを確認し、重要なファイルは事前にバックアップしてください。-Oの旧型プロトコルはリモートシェルの解釈とセキュリティリスクがあるため、通常使用されません。scpは変更されたファイルのみを比較して同期したり、削除状態を合わせるツールではありません。そのような作業にはrsyncが適している場合があります。
よくある質問
scpでポートオプションは-pですか?
いいえ。サーバーポートは大文字の-Pです。小文字の-pはファイルの時刻と権限を保持するオプションです。
公式ドキュメント
オプションの正確な動作や実装ごとの違いは、scpに関する公式ドキュメントで確認できます。




