SFTP、SCP、FISHプロトコルの違いは何ですか?

SFTP、SCP、FISHプロトコルの違いは何ですか?

私はSCPがSSHを介してファイルをコピーするツールだと思いましたが、SSHを介してファイルをコピーすることをSFTPと呼びますが、それ自体はFISHの同義語です。

しかし、今これを行うためにWindowsでTotal Commanderプラグインを探しているとき、そのページに「セキュアFTP(FTP over SSH)を介してリモートサーバーへのアクセスを許可します。SSH2が必要です。これはSCPとは異なります」表示されていることを発見しました! 」。

違うと、私が何を間違って理解したのでしょうか?

答え1

SFTPsshベースのFTPプロトコルではなく、SSH2(および一部のSSH1実装)に含まれるSSHプロトコルの拡張です。 SFTPはFTPに似たファイル転送プロトコルですが、SSHプロトコルをネットワークプロトコルとして使用します(SSHが認証と暗号化を処理するという利点があります)。

SCPはファイル転送にのみ使用され、リモートディレクトリの一覧表示、ファイルの削除などの他の操作を実行できませんが、SFTPはこれらの操作を実行できます。

魚らしい別の合意がありますSSHまたはRSHを使用してファイルを転送できます。


アップデート(2021/03/09):リリースノートに従うオープンSSH 8.0/8.0p1(2019-04-17):

これSCPプロトコルは古く、柔軟性がなく、修正が容易ではありません。ファイル転送には、sftpやrsyncなどの最新のプロトコルを使用することをお勧めします。

答え2

SSHプロトコルは双方向にストリーミングできるセキュリティトンネルを作成し、このストリームを使用して2つのプロセスを接続できます。

最もよく知られている2つのプロセスは、シェル(サーバー)と対話型端末エミュレータ(クライアント)です。これは、SSHを介してサーバーに接続し、リモートシェルプロンプトでコマンドを入力するときに使用します。

SCPこのシェルとリモートコマンドのみを使用してファイル転送を完了するかどうか。 SCP では、クライアントがサーバーに接続し、すべての認証と承認が完了すると、クライアントは同様のコマンドをリモートシェルに送信します。scp -f myfile.txtこれは単にmyfile.txtファイルの内容をストリームに書き込みます(クライアントを読むため)。または、scp -t myfile.txtストリームから読み込み、 myfile.txt に書き込みます。

scp マンページに -f と -t ("from" と "to" 用) がないことがわかります。内部とみなされます。軽量承認スキームと単純なヘッダーにファイルの内容をラップしてディレクトリを転送するスキームがあります。しかし、ほとんどの場合、SCPの基本的な作業は、ファイルのバイトをSSHトンネルに書き込み、SSHに圧縮と整合性の複雑さを処理させることです。

SFTPこれは、SSHを介してトンネリングされるより複雑なファイル転送プロトコルです。

SFTPでは、要求と応答は、「SSH_FXP_OPEN」、「SSH_FXP_STAT」、「SSH_FXP_READ」、「SSH_FXP_DATA」、「SSH_FXP_CLOSE」などの名前を持つバイナリエンコードされたデータパケットです。

このプロトコルの興味深い特徴は、コマンドをパイプラインに接続でき、応答が任意の順序で来ることができることです。これは、セッションが応答を待つのに少ない時間を費やすことを意味し、速度が異なるデータソースを使用している限り、サーバーでの同時転送を最適化する機会があります。もちろん、これらの機会がどの程度利用されているのかは不明です。

SFTPには、削除、名前変更、切り取り、移動など、SCPができない多くの操作を実行できるコマンドがあります。

すべての詳細は以下で確認できます。IETFドラフト

scp最新のSSHパッケージは、ユーザーバイナリをSFTPバイナリへのシンボリックリンクに置き換えることに注意する価値があります。このSFTPはscpの外観と感触を持っていますが、実際にはSFTPプロトコルを使用しています。

召喚——オライリーSSH: Secure Shell、最終ガイド、セクション5.7「サブシステム」:

警告:sshd2_configからsubsystem-sftp行を削除しないでください。 scp2とsftpが機能するにはこの行が必要です。内部的には、両方のプログラムがssh2 -s sftpを実行してファイル転送を実行します。

興味深い歴史です。 SSH経由でファイルを転送したいのですが、リモートシステムにSCPがないとしましょう。あるいは、SCPよりも複雑なファイル操作を実行したいのですが、リモートシステムにSFTPがない可能性があります。どちらのシナリオも今日では発生する可能性はありませんが、フィッシュが発明されたときに発生しました。

だからクライアント開発者は真夜中司令官独自のソリューションを作成してください。原則として、scpに似ていますが、より多くのコマンドがあります。クライアントは次のコマンドを送信します。

 #RETR /some/name
 ls -l /some/name | ( read a b c d x e; echo $x ); echo '### 100'; cat /some/name; echo '### 200'

Fishサーバーと会話すると、そのサーバーは#RETRコマンドを解釈します。ただし、リモートサーバーにフィッシュサーバーがインストールされていない場合、コマンドはシェルで解釈されます。最初にコメントが続き、次にファイルに関する情報を印刷するコマンドが続き、次にいくつかのタグで囲まれたファイルの内容が続きます。

実際にサーバーにscpまたはFishがない場合、クライアントはシェルコマンドを使用してscpに対応する「自己実行」を実行しましたが、名前の変更、移動、切り捨てなどのシェルコマンドを送信することもできます。

Fishの詳細については、Midnight Commanderのソースコードを参照してください。ここ

エンドユーザーの観点から、これはどういう意味ですか?

  • 以前のSSHサーバーの実装はscpをサポートしていますが、SFTPはサポートしておらず、SFTPクライアントは使用できません。
  • SFTPによる性能、安定性、柔軟性の向上
  • あなたの "scp"クライアントは変装したSFTPクライアントかもしれません(引用が必要です)
  • Fishは特定の状況で役に立ちますが、そうでない場合はより標準的なSFTPを使用します。

答え3

簡単に言うと:

SFTP = SSH + SFTP-server on server
SCP  = SSH + `scp` on server side
FISH = SSH + `dd` (and some other basic Unix utilities on the server side only) 

答え4

FISHとSFTPは観察されたように似ており、どちらもSSHを介して動作します。 SFTPは転送を容易にするためにSSHサーバーの特定のサポートと設定を必要としますが、少し安全であり、システム管理者はSFTPのみを許可できます(この場合はダウンします)。 、FISHが勝つ)動作しません)。

FISHをコピーするにはシェル(sh/rshなど)が必要なため、システムへのフルSSHアクセスが必要です。セキュリティがより難しいと思います(これまでにしたことがないため、これについて客観的に言及することはできません)。

可能であれば、SFTP、scp、FISH(順番に)を使用することをお勧めします。

ウィキペディア FISH 記事

関連情報