セキュアコピープロトコル(SCP )は、ローカルホストとリモートホスト間、または2つのリモートホスト間でコンピュータファイルを安全に転送する手段です。これはセキュアシェル(SSH)プロトコルに基づいています。[ 1 ]「SCP」は一般的にセキュアコピープロトコルとプログラム自体の両方を指します。[ 2 ]
2019年4月のOpenSSH開発者によると、SCPは時代遅れで柔軟性に欠け、容易に修正できないため、ファイル転送にはSFTPやrsyncなどのより新しいプロトコルの使用を推奨している。[ 3 ]そのため、OpenSSHバージョン9.0以降、scpクライアントはデフォルトで従来のSCP/RCPプロトコルの代わりにSFTPを使用してファイル転送を行う。[ 4 ]
SCPは、 BSD RCPプロトコル[ 5 ]に基づくネットワーク プロトコルで、ネットワーク上のホスト間でのファイル転送を サポートします。 SCP は、データ転送にSecure Shell (SSH) を使用し、認証にも同じメカニズムを使用するため、転送中のデータの真正性と機密性が保証されます。クライアントは、オプションで基本属性 (パーミッション、タイムスタンプ) を含めて、ファイルをサーバーに送信 (アップロード) できます。クライアントは、サーバーからファイルやディレクトリを要求 (ダウンロード) することもできます。 SCP は、デフォルトではTCP ポート22 で動作します。[ 6 ] RCP と同様に、プロトコルの詳細を定義するRFC は ありません。
通常、クライアントはリモートホストへのSSH接続を開始し、リモートサーバー上でSCPプロセスを起動するよう要求します。リモートSCPプロセスは、次の2つのモードのいずれかで動作します。
ほとんどの SCP クライアントでは、ソース モードはフラグ (from) でトリガーされ-f、シンク モードは (to) でトリガーされます-t。[ 2 ] これらのフラグは内部的に使用され、SCP ソース コード以外では文書化されていません。
従来、リモート間セキュアコピーでは、SCPクライアントは送信元ホストへのSSH接続を開き、送信元ホストに宛先へのSCP接続を開くよう要求していました。(リモート間モードでは、2つのSCP接続を開いて送信元クライアントを中間者として使用することはサポートされていませんでした。)そのため、パスワード認証モードまたはキーボード対話型認証モードで動作している場合、宛先サーバーの認証情報が送信元に漏洩してしまうため、SCPを使用して送信元から宛先へリモートコピーすることはできませんでした。ただし、ユーザー入力を必要としない鍵ベースまたはGSSAPI方式では可能でした。[ 2 ]
最近では、リモート間リモートモードでは、転送の発信元であるクライアントが転送の第三者であっても、そのクライアントを経由してトラフィックをルーティングすることがサポートされています。この方法では、認証情報は発信元クライアント(第三者)にのみ存在する必要があります。[ 7 ]
SCP は SSH ログイン シェルとの通信にテキストを想定していません。SSH プロファイルによって送信されるテキスト (例えばファイルecho "Welcome"内.bashrc) はエラー メッセージとして解釈され、ヌル行 ( echo "") があると SCP クライアントはエラー メッセージの完了を待ってデッドロック状態になります。[ 2 ]
SCPプログラム[ 8 ]は、サービスデーモンまたはクライアントとしてSCPプロトコルを実装するソフトウェアツールです。これは、安全なコピーを実行するプログラムです。
おそらく最も広く使われている SCP プログラムは OpenSSHコマンドラインscpプログラムで、ほとんどの SSH 実装に含まれています。このscpプログラムは、コマンドの安全なアナログですrcp。このscpプログラムは SCP サービスを提供するすべての SSH サーバーに含まれていなければならず、scpSCP サーバーとしても機能します。OpenSSH 9.0 以降、このプログラムはより新しく安全なSFTPプロトコルを使用するように更新され、-O古い SCP 専用サーバーで SCP を使用するためのオプションが追加されました。[ 4 ]
scp通常、プログラム[ 9 ]の構文はcp(コピー)の構文に似ています。
ローカルファイルをリモートホストにコピーする:
scp LocalSourceFile user @ remotehost : directory / TargetFile
リモートホストからファイルをコピーし、-rリモートホストからフォルダを再帰的にコピーする(スイッチ付き):
scp user @ remotehost : directory / SourceFile LocalTargetFile scp -r user @ host : directory / SourceFolder LocalTargetFolder
リモートホストがデフォルトの22番ポート以外のポートを使用している場合は、コマンドで指定できることに注意してください。たとえば、ホストからファイルをコピーする場合:
scp -P 2222 user @ host : directory / SourceFile TargetFile
Secure Copy Protocol はファイル転送のみを実装するため、 GUI SCP クライアントは稀です。これは、それを実装するには追加の機能 (少なくともディレクトリ一覧表示) が必要となるためです。たとえば、 WinSCP はデフォルトで SFTP プロトコルを使用します。[ 10 ]ls SCP モードで動作している場合でも、WinSCP のようなクライアントは通常純粋な SCP クライアントではありません。これは、追加機能 (コマンドなど)を実装するために他の手段を使用する必要があるためです。 [ 11 ]これにより、プラットフォーム依存性の問題が発生します。
SSH経由でファイルを管理するためのより包括的なツールとしては、SFTPクライアントがあります。
2019年に、OpenSSH SCPツールとプロトコルに関連する脆弱性CVE - 2019-6111 [ 12 ]が発表されました。これにより、ユーザーはSCPクライアントのターゲットディレクトリ内の任意のファイルを上書きできます。