Home
1038 words
5 minutes
【Unix】scpコマンドの解説
2025-02-22

最終更新:2025-02-22

scp (secure copy) コマンドは、SSHプロトコルを利用して、リモートホスト間またはローカルとリモート間でファイルやディレクトリを安全に転送するためのツールである。

パスワード認証や公開鍵認証を介して暗号化された接続を行うため、データの安全性が確保される。


使用方法#

scp [オプション] コピー元 コピー先

例えば、ローカルの file.txt をリモートホストのユーザー user のホームディレクトリにコピーする場合は、

scp file.txt user@remotehost:~

とする。この場合、SSH認証によりセキュアな接続が確立され、ファイルが転送される。


主なオプションの詳細#

以下に、scpコマンドが提供する各種オプションについて、具体的に説明する。

  • -r
    ディレクトリを再帰的にコピーする。
    例:

    scp -r local_directory user@remotehost:~/destination_directory
    

    このオプションにより、ディレクトリとその中のすべてのファイル・サブディレクトリが転送される。

  • -P port
    接続に使用するリモートホストのポート番号を指定する。
    注意: 大文字の -P を用いる点に留意する。
    例:

    scp -P 2222 file.txt user@remotehost:~
    

    この例では、リモートホストのSSHポートが 2222 であることを指定している。

  • -p
    コピーする際に、元のファイルの変更時刻、アクセス時刻、パーミッションなどの属性を保持する。
    例:

    scp -p file.txt user@remotehost:~
    

    これにより、ファイルの属性がそのまま転送される。

  • -q
    転送時の進捗状況や詳細な出力を抑制し、静かなモードで実行する。
    例:

    scp -q file.txt user@remotehost:~
    

    出力が少なくなり、スクリプト内で利用する際に便利である。

  • -C
    転送データを圧縮する。ネットワーク帯域幅が限られている場合や、転送するデータが大きい場合に有効である。
    例:

    scp -C file.txt user@remotehost:~
    
  • -v
    詳細なデバッグ情報を表示する。転送の過程で問題が発生した場合の診断に有用である。
    例:

    scp -v file.txt user@remotehost:~
    
  • -o option
    SSHクライアントの設定オプションを直接指定する。特定のSSH設定(例えば、ホスト鍵の確認をスキップするなど)を行いたい場合に利用する。
    例:

    scp -o "StrictHostKeyChecking=no" file.txt user@remotehost:~
    

    この例では、ホスト鍵の確認を行わずに接続を試みる。

  • -S program
    scpで使用するSSHプログラムを指定できる。カスタムのSSHクライアントを利用する場合に適用される。
    例:

    scp -S /usr/bin/ssh2 file.txt user@remotehost:~
    

ハンズオン#

以下に、scpコマンドを利用した具体的な操作手順を示す。実際の環境で試す際の参考とすること。

1. ローカルファイルをリモートホストへ転送する#

ターミナルを開き、以下の手順で操作する。

  1. ローカルにある example.txt を、ユーザー user のリモートホスト remotehost に転送する。

    scp example.txt user@remotehost:~
    
  2. 上記のコマンドを実行すると、リモートホストのホームディレクトリに example.txt がコピーされる。パスワードまたは公開鍵認証が行われ、セキュアにファイルが転送される。

2. ディレクトリを再帰的に転送する#

  1. ローカルの project_folder ディレクトリ全体を、リモートホストの ~/backup ディレクトリにコピーする。

    scp -r project_folder user@remotehost:~/backup
    
  2. -r オプションを指定することで、project_folder に含まれる全てのサブディレクトリとファイルが転送される。

3. 非標準ポートを利用してファイルを転送する#

  1. リモートホストが SSH の標準ポート 22 以外(例えば 2222)で動作している場合、以下のように指定する。

    scp -P 2222 example.txt user@remotehost:~
    
  2. 大文字の -P を使用し、ポート番号 2222 を明示的に指定する点に注意すること。

4. ファイル属性を保持しながら転送する#

  1. ファイルの変更時刻やパーミッションなどの属性を保持して example.txt を転送するには、-p オプションを使用する。

    scp -p example.txt user@remotehost:~
    

5. 転送データを圧縮する#

  1. ネットワーク帯域を節約するために、転送時にデータを圧縮するには、-Cオプションを指定する。

    scp -C example.txt user@remotehost:~
    

scpコマンドは、セキュアなファイル転送を実現するための強力なツールである。各種オプションを状況に合わせて組み合わせることで、様々な転送要件に柔軟に対応できる。実際の運用において、ここで示したハンズオンや詳細なオプションの説明を参考にしながら、安全かつ確実なファイル転送を行うことが望まれるであろう。

【Unix】scpコマンドの解説
https://ss0832.github.io/posts/20250222_scp_command_guide/
Author
ss0832
Published at
2025-02-22