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に関する公式ドキュメントで確認できます。