SCPはSSH経由でファイルをコピーするツールだと思っていましたが、SSH経由でファイルをコピーすることはSFTPと呼ばれ、それ自体がFISHの同義語です。
しかし今、Windowsでこれを行うTotal Commanderプラグインを探していたとき、そのページで「セキュアFTP(SSHを介したFTP)を介したリモートサーバーへのアクセスを許可します。SSH2が必要です。 SCPとして!」。
同じでない場合、私は何を誤解していますか?
SCPはSSH経由でファイルをコピーするツールだと思っていましたが、SSH経由でファイルをコピーすることはSFTPと呼ばれ、それ自体がFISHの同義語です。
しかし今、Windowsでこれを行うTotal Commanderプラグインを探していたとき、そのページで「セキュアFTP(SSHを介したFTP)を介したリモートサーバーへのアクセスを許可します。SSH2が必要です。 SCPとして!」。
同じでない場合、私は何を誤解していますか?
回答:
SFTPはssh上のFTPプロトコルではなく、SSH2(および一部のSSH1実装)に含まれるSSHプロトコルの拡張です。SFTPはFTPに似たファイル転送プロトコルですが、ネットワークプロトコルとしてSSHプロトコルを使用します(そして認証と暗号化を処理するためにSSHを離れる利点があります)。
SCPはファイルの転送専用であり、リモートディレクトリの一覧表示やファイルの削除など、SFTPが行う他のことはできません。
FISH は、SSHまたはRSHを使用してファイルを転送できるさらに別のプロトコルのようです。
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を「ロール」しましたが、シェルコマンドを同様に送信して、名前の変更、移動、切り捨てなどを行うことができます。
魚の詳細は、こちらのミッドナイトコマンダーのソースにあります。
エンドユーザーの観点からこれはすべてどういう意味ですか?
シンプルに:
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)
sftp
およびscp
リモートシェルでのみ、基本的なUnixのutuilitiesを使用するFISHとは異なり、サーバ側で特別なプログラムが必要です。
scp
scpやsftp-serverのようなサーバープログラムはありません)。実際、リモート側が「制限付き」のUnixで、必要なものをインストールできない場合があります。SSH(WiFi経由)でAndroidにファイルを転送するために、rpush-catスクリプトのセットを作成しました-おそらく、FISHクライアントが機能します。(tramp-fish.el
Emacsでも可能:通常のTRAMPクライアントはstat
、Androidになかったため機能しませんでした。)
scp
クライアント側に加えて、サーバー側でもどのように必要かについて詳しく説明していただけますか?簡単なグーグル検索でscp
は、サーバー側でも必要なことを確認するものが見つかりませんでした。
FISHとSFTPは似ており、SSHで動作することが確認されているように、SFTPは転送を容易にするためにSSHサーバーでの特定のサポートと構成を必要としますが、SSHでSFTPのみを許可します(これらの状況ではFISHが勝ちます動作しません)。
FISHにはシェル(たとえばsh / rsh)をコピーする必要があるため、マシンへの完全なSSHアクセスが必要です。セキュリティを確保するのが難しいと思います(これまで客観的にコメントすることはできませんでした)。
可能であれば、SFTP、scp、FISH(この順序で)をお勧めします。
scp
scpやsftp-serverのようなサーバープログラムはありません)。実際、リモート側が「制限付き」のUnixで、必要なものをインストールできない場合があります。SSH(WiFi経由)でAndroidにファイルを転送するために、rpush-catスクリプトのセットを作成しました-おそらく、FISHクライアントが機能します。(tramp-fish.el
Emacsでも可能:通常のTRAMPクライアントはstat
Androidになかったため機能しませんでした。)