Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

scpコマンド(エスシーピー)とは | 意味や読み方など丁寧でわかりやすい用語解説

scpコマンド(エスシーピー)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

セキュアコピーコマンド (セキュアコピーコマンド)

英語表記

scp (エスシーピー)

用語解説

scpコマンドは、Secure Copy Protocolの略であり、ネットワークを介してファイルを安全にコピーするためのコマンドである。主にUNIX系OSやmacOSで利用され、ローカル環境とリモートサーバー間、あるいはリモートサーバー同士の間でファイルを転送する際に広く用いられる。その最大の特長は、SSH (Secure Shell) プロトコルを基盤としている点にある。これにより、転送されるファイルの内容だけでなく、ユーザー名やパスワードといった認証情報もすべて暗号化され、ネットワーク上を安全にやり取りできる。これは、従来のFTP (File Transfer Protocol) やrcp (remote copy) といったプロトコルが持っていたセキュリティ上の課題を解決するものであり、システム運用や開発において不可欠なツールとなっている。システムエンジニアを目指す者にとって、このコマンドの理解と活用は、サーバー管理やファイル共有の基本中の基本と言える。

scpコマンドがなぜ安全であるかというと、SSHの強力な暗号化と認証機構を利用しているからである。SSHは、クライアントとサーバー間で安全な通信路を確立し、その中でファイル転送を含む様々な操作を可能にする。具体的には、データがネットワーク上を流れる前に暗号化され、受信側で復号されるため、もし通信が盗聴されたとしても、第三者が内容を読み取ることは非常に困難である。また、パスワード認証や公開鍵認証といった厳格な認証メカニズムにより、許可されていないユーザーがファイルにアクセスすることを防ぐ。これにより、機密情報や重要な設定ファイルなども安心して転送できる環境が提供される。

基本的なscpコマンドの書式は scp [オプション] [転送元] [転送先] である。この書式に従い、様々なファイルを転送できる。 例えば、ローカル環境にあるファイルをリモートサーバーへコピーする場合、scp local_file.txt user@remote_host:/path/to/destination/ のように記述する。ここで、local_file.txt はローカルの転送元ファイル名、user はリモートサーバーのユーザー名、remote_host はリモートサーバーのホスト名またはIPアドレス、/path/to/destination/ はリモートサーバー上の転送先ディレクトリパスを示す。転送先ディレクトリのパスを省略した場合、通常はリモートユーザーのホームディレクトリが指定されたものと見なされる。 逆に、リモートサーバーからローカル環境へファイルをコピーする場合は、scp user@remote_host:/path/to/source/remote_file.txt local_destination/ のように記述する。この場合、remote_file.txt はリモートサーバー上の転送元ファイル名、local_destination/ はローカルの転送先ディレクトリパスである。 リモートサーバーから別のリモートサーバーへ直接ファイルをコピーすることも可能で、scp user1@host1:/path/to/source/file.txt user2@host2:/path/to/destination/ のように記述するが、この操作には両方のリモートサーバーへの認証が必要となり、より複雑な設定を要する場合もあるため、まずはローカルとリモート間の転送から慣れるのが一般的である。

scpコマンドには、ファイルの転送方法を細かく制御するための様々なオプションが用意されている。 最もよく使われるオプションの一つは -r である。これは「recursive(再帰的)」を意味し、ディレクトリとその中にあるすべてのサブディレクトリ、ファイルをまとめてコピーする際に利用する。例えば、ローカルの my_directory/ をリモートサーバーにコピーする場合、scp -r my_directory/ user@remote_host:/path/to/destination/ となる。 デフォルトのSSHポート番号(22番)以外で接続するサーバーに対しては、-P オプションを使ってポート番号を指定する。scp -P 2222 local_file.txt user@remote_host:/path/to/destination/ のように記述し、2222番ポートで接続する。なお、この -P は大文字であることに注意が必要だ。 パスワード認証ではなく、公開鍵認証を利用している場合は、-i オプションで秘密鍵のファイルを指定する。scp -i ~/.ssh/id_rsa local_file.txt user@remote_host:/path/to/destination/ のように、使用する秘密鍵のパスを指定する。これはセキュリティの観点からも推奨される認証方法である。 転送元のファイルのタイムスタンプやパーミッションを転送先でも保持したい場合は、-p オプションを使用する。これは特に設定ファイルやスクリプトを転送する際に便利である。 大きなファイルを転送する際などに、進行状況を示すプログレスバーや各種メッセージを表示させたくない場合は、-q オプション(quietモード)を使用すると出力が抑制される。 また、ネットワーク帯域が限られている環境でファイルを転送する際には、-C オプションを利用すると転送データを圧縮してから送るため、転送時間を短縮できる場合がある。ただし、データ圧縮と解凍のCPU負荷も考慮する必要がある。

scpコマンドを使用する上での注意点として、転送先のディレクトリが存在しない場合、指定した名前でファイルが作成される点がある。例えば、scp local_file.txt user@remote_host:/path/to/non_existent_dir/ とした場合、non_existent_dir というディレクトリがなければ、non_existent_dir という名前のファイルが作成され、その中に local_file.txt の内容がコピーされる。これを防ぐためには、事前に転送先ディレクトリが存在するか確認するか、適切にパスを指定する必要がある。また、転送先に同名のファイルが存在する場合、確認なしで上書きされるため、誤って重要なファイルを消してしまわないよう細心の注意を払うべきである。

セキュリティの側面では、パスワード認証を利用する場合、パスワードがネットワーク上を暗号化されて流れるとはいえ、総当たり攻撃などに対しては公開鍵認証の方がより強固である。そのため、可能な限り公開鍵認証を設定し、適切な権限で秘密鍵を保護することが推奨される。また、初めて接続するリモートホストに対しては、そのホストのフィンガープリント(公開鍵のハッシュ値)が正当なものであるかを確認するよう促される。これは中間者攻撃(Man-in-the-Middle attack)を防ぐための重要なステップであり、表示されたフィンガープリントを事前に確認しているものと照合することが望ましい。

他のファイル転送コマンドと比較すると、cpコマンドはローカルファイルシステム内でのコピーに特化しているのに対し、scpはネットワークを介した安全なコピーに特化している。FTPは非暗号化通信が主流でありセキュリティリスクが高いが、sftp(SSH File Transfer Protocol)はSSHを基盤としている点でscpと共通する。sftpは対話型のファイル操作(ファイルのリスト表示、ディレクトリ作成など)が可能であるのに対し、scpはシンプルなコピーに特化しており、スクリプトなどでの自動化に適している。rsyncコマンドもファイル転送に用いられるが、こちらは差分転送(一度転送したファイルで変更があった部分のみを転送)やより高度な同期機能を提供しており、大量のファイルや頻繁な更新があるファイルの転送で真価を発揮する。scpは手軽に安全なファイル転送を行うための選択肢として、多くのシステムエンジニアにとって基本的なコマンドであり続ける。

関連コンテンツ

関連IT用語