ファイル転送シェルプロトコル(FISH )は、セキュアシェル(SSH)またはリモートシェル(RSH)を使用してコンピュータ間でファイルを転送し、リモートファイルを管理するためのネットワークプロトコルです。
FISHの利点は、サーバー側で必要なのがSSHまたはRSHの実装、Unixシェル、および一連の標準的なUnixユーティリティ(ls、cat、ddなど)だけであることです(リモートシェルを介してファイルにアクセスする他の方法、例えばscpはサーバー側にscpを必要とします)。オプションとして、サーバー上に特別なFISHサーバープログラム(start_fish_serverと呼ばれる)を用意することもできます。このプログラムはUnixシェルの代わりにFISHコマンドを実行するため、処理速度が向上します。
このプロトコルは、チェコのLinuxカーネルハッカーであるパベル・マチェクによって1998年にMidnight Commanderソフトウェアツール用に設計されました。[ 1 ]
クライアントは、以下の形式のテキストリクエストを送信します。
#FISH_COMMAND 引数... 同等のシェルコマンド、 複数行になる場合があります
Fishコマンドはすべて定義されていますが、シェルコマンドは異なる場合があります。Fishコマンドは常に優先されます。サーバーは、Fishコマンドを理解できる場合はそれを実行することが期待されます。ただし、理解できない場合は、シェルコマンドの実行を試みます。特別なサーバープログラムがない場合、UnixシェルはFishコマンドをコメントとして無視し、同等のシェルコマンドを実行します。
サーバーからの応答は複数行ですが、必ず次の行で終わります。
### xyz <オプションのテキスト>line.###はこの行をマークするための接頭辞で、は戻りコードです。戻りコードはFTPxyzで使用されるコードの上位セットです。コード 000 と 001 は特殊で、その意味は終了行の前にサーバー出力があるかどうかによって異なります。
クライアントは、リモートマシン上で実行されるコマンドとして、SSHまたはRSH接続を開始します。これにより、サーバーはFISH接続を通常のRSHまたはSSH接続と区別できるようになります。echo FISH:;/bin/sh
サーバーに送信される最初の 2 つのコマンドは、FISH プロトコル、そのバージョン、および拡張機能をネゴシエートするためのFISHものです。VER
#FISH echo ; start_fish_server ; echo '### 200'#VER 0.0.2 <feature1> <feature2> <...> echo '### 000'サーバーはVERコマンドに対して次のような行で応答する場合があります。
バージョン 0.0.0 <機能2> <...> ### 200
これは、サポートされているFISHプロトコルのバージョンとサポートされている拡張機能を示しています。