回答:
一言で言えば、SCPはファイルの転送にのみ使用でき、非対話型です(つまり、すべてをコマンドラインで指定する必要があります)。SFTPはより複雑で、ディレクトリの作成、ディレクトリとファイルの削除(もちろん、すべてシステムのアクセス許可の対象)などの操作をインタラクティブなコマンドで実行できます。
ForceCommand internal-sftp
。私はPermitTTY no
また、scpアクセスを防ぎますが、sftpアクセスを許可します。しかし、これらの2つのことはsftpを妨げるべきではありません。出典:個人的な経験。
ウィキペディアから:
ファイル転送のみを許可する以前のSCPプロトコルと比較して、SFTPプロトコルは、リモートファイルに対する一連の操作を許可します。これは、リモートファイルシステムプロトコルに似ています。SCPクライアントと比較したSFTPクライアントの追加機能には、中断された転送の再開、ディレクトリリスト、およびリモートファイルの削除が含まれます。[1]これらの理由により、GUI SCPクライアントと比較してGUI SFTPクライアントの実装は比較的簡単です。
そして
SCPとSFTPはどちらも同じ一般的なレベルのオーバーヘッドでファイル転送中に同じSSH暗号化を利用しますが、SCPは通常、特に高遅延ネットワークでのファイル転送でSFTPよりもはるかに高速です。これは、SCPがより効率的な転送アルゴリズムを実装しているためです。転送アルゴリズムは、パケットの確認を待つ必要がありません。これにより速度は向上しますが、転送を中断できないという犠牲が伴うため、SFTPとは異なり、セッションを終了しないとSCP転送をキャンセルできません。
純粋にコマンドラインの観点から:
2つのコマンド間の他の重要な違いがあることですSFTPは、単一のコマンドラインを使用してリモートロケーションにローカルファイルを置くことができない、それは、リモートファイルを取得することができますが、一方で、SCPは、両方を行うことができます。
sftp user@host:/path/to/remote.file [/path/to/local.file]
scp user@host:/path/to/remote.file [/path/to/local.file]
scp /path/to/local.file user@host:[/path/to/remote.file]
sftp {user}@{host}:{remote_dir} <<< $'put {local_file_path}'
SSH(S ecure SH ell)は、暗号化されたネットワークプロトコルであり、リモートログインおよびその他のネットワークサービスが、セキュリティで保護されていないネットワーク上で安全に動作できるようにします。
違い: SFTPは対話モード(セッション)で動作し、SCPは非対話モードで動作します。SFTPを使用して、リモートファイルシステムにアクセスできます。つまり、ファイルの作成、削除、および一覧表示です。
類似性: SCP(両方S ecure C OPY P rotocol)とSFTP(S SH F ILEのTの ransferのPの rotocol)は、ネットワーク上のホスト間でファイル管理をサポートしているネットワークプロトコルです。両方ともSSHを使用します。
2つのプロトコルのほとんどの違いは他の回答ですでに述べられており、https: //unix.stackexchange.com/q/8707/19088でより詳細に述べられています
curlのドキュメントによると、もう1つの違いは、SCPプロトコルは移植性が低く、通常はUnixシステム間でのみ機能することです。
ところで、curlは両方のプロトコルを実装しており、デフォルトのOpenSSH SFTPクライアント実装とは異なり、SFTPとSCPの両方に対して非対話的です。
また、FISHプロトコルもあり、SCPまたはSFTPを使用せずにSSH経由でファイルを転送できることに注意してください。私が知る限り、FISHはあまり人気がなく、現在、いくつかのファイルマネージャー(Midnight CommanderとKDEベースの一部)とLftpに実装されています。