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


59

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

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

同じでない場合、私は何を誤解していますか?


5
これは前の質問の拡張です。(@Ivan:これを言及すると便利だっただろう。)
ジル「SO-は悪であることを停止」

参照してくださいsuperuser.com/q/134901/133844
ペール

回答:


57

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

SCPはファイルの転送専用であり、リモートディレクトリの一覧表示やファイルの削除など、SFTPが行う他のことはできません。

FISH は、SSHまたはRSHを使用してファイルを転送できるさらに別のプロトコルのようです。


11
追加する価値がある:FTP over TLSであるFTPSもあります。
ミケマッカナ14

3
@mikemaccanaあなたはその後、通常のFTP接続を介して明示的FTPSを使用する可能性をFTPES魔女をされて追加することができます
Kiwy

26

SSHプロトコルは、双方向ストリームを転送できる安全なトンネルを作成し、そのストリームを使用して任意の2つのプロセスを接続できます。

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

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

-fと-t( "from"と "to"の)はscpのマンページにないことに気付くでしょう。それらは内部と見なされます。軽量の承認スキームと、単純なヘッダーでファイルの内容をラップしてディレクトリを転送するスキームがあります。しかし、SCPの大部分は、ファイルのバイトをSSHトンネルに書き込むという基本的な問題であり、SSHに圧縮や整合性などの複雑なものを処理させます。

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

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

このプロトコルの興味深い機能の1つは、コマンドをパイプライン化でき、応答が任意の順序で届く可能性があることです。これは、セッションが応答を待つ時間を短縮し、さまざまな速度のデータソースを使用して1つのサーバーからの同時転送を最適化する機会があることを意味します。

SFTPには、SCPが対応していない多くのことを行うコマンドがあります。削除、名前変更、切り捨て、移動など。

すべての詳細は、IETF Draftで入手できます。

新しいSSHパッケージでは、ユーザーscpバイナリがSFTPバイナリへのシンボリックリンクに置き換えられることに注意してください。このSFTPはscpのルックアンドフィールを備えていますが、カバーの下ではSFTPプロトコルを使用しています。

引用 -O'Reilly SSH:The Secure Shell、The Definitive Guide、section 5.7 "Subsystems":

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

は歴史の興味深い部分です。SSH経由でファイルを転送したいが、リモートシステムにSCPがないとします。または、SCPよりも高度なファイル操作を行いたいのに、リモートシステムにSFTPがない場合があります。これらのシナリオはいずれも今日ではない可能性が高いですが、Fishが発明されたときはそうでした。

クライアントのMidnight Commanderの開発者は、独自のソリューションの作成に取りかかりました。原則として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通信している場合、コマンドを解釈します。ただし、リモートサーバーにFishサーバーがインストールされていない場合、コマンドはシェルによって解釈されます。最初にコメント、次にファイルに関する情報を出力するコマンド、続いていくつかのマーカーで囲まれたファイルの内容。

事実上、scpまたはfishがない場合、クライアントは同等のscpを「ロール」しましたが、シェルコマンドを同様に送信して、名前の変更、移動、切り捨てなどを行うことができます。

魚の詳細は、こちらのミッドナイトコマンダーのソースにあります

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

  • 古いSSHサーバーの実装はscpをサポートしていますが、SFTPはサポートしていません。これらではSFTPクライアントを使用できません
  • パフォーマンス、信頼性、柔軟性のためにSFTPを使用する
  • 「scp」クライアントは、変装したSFTPクライアントである可能性があります(引用が必要
  • 魚はニッチな状況では有用かもしれませんが、そうでなければより標準的なSFTPを使用します。

20

シンプルに:

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) 

1
しかし、sftpおよびscpリモートシェルでのみ、基本的なUnixのutuilitiesを使用するFISHとは異なり、サーバ側で特別なプログラムが必要です。
imz-イヴァンザカリヤシェフ

FISHの説明によると、FISHの注目すべき特徴は、リモート側で特別なものを必要としないことです(scpscpやsftp-serverのようなサーバープログラムはありません)。実際、リモート側が「制限付き」のUnixで、必要なものをインストールできない場合があります。SSH(WiFi経由)でAndroidにファイルを転送するために、rpush-catスクリプトのセットを作成しました-おそらく、FISHクライアントが機能します。(tramp-fish.elEmacsでも可能:通常のTRAMPクライアントはstat、Androidになかったため機能しませんでした。)
imz-Ivan Zakharyaschev

2
scpクライアント側に加えて、サーバー側でもどのように必要かについて詳しく説明していただけますか?簡単なグーグル検索でscpは、サーバー側でも必要なことを確認するものが見つかりませんでした。
ヨハネスビットナー

11

FISHとSFTPは似ており、SSHで動作することが確認されているように、SFTPは転送を容易にするためにSSHサーバーでの特定のサポートと構成を必要としますが、SSHでSFTPのみを許可します(これらの状況ではFISHが勝ちます動作しません)。

FISHにはシェル(たとえばsh / rsh)をコピーする必要があるため、マシンへの完全なSSHアクセスが必要です。セキュリティを確保するのが難しいと思います(これまで客観的にコメントすることはできませんでした)。

可能であれば、SFTP、scp、FISH(この順序で)をお勧めします。

ウィキペディアFISH記事


リンクされた説明によると、FISHの注目すべき特徴は、リモート側で特別なものを必要としないことです(scpscpやsftp-serverのようなサーバープログラムはありません)。実際、リモート側が「制限付き」のUnixで、必要なものをインストールできない場合があります。SSH(WiFi経由)でAndroidにファイルを転送するために、rpush-catスクリプトのセットを作成しました-おそらく、FISHクライアントが機能します。(tramp-fish.elEmacsでも可能:通常のTRAMPクライアントはstatAndroidになかったため機能しませんでした。)
imz-Ivan Zakharyaschev
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.