Files transferred over shell protocol(FISH)とは、SSHやRSHを使ってコンピュータ間でファイルを転送したり、遠隔のファイルを管理するための通信プロトコルである。
FISHの利点は、サーバ側で必要となるのがSSHまたはRSHと、シェルおよびUNIXの標準ユーティリティ(ls、cat、dd)だけという点である。オプションとして、FISHサーバ専用プログラム(start_fish_server)もあり、UNIXのシェルを使わずにFISHコマンドを実行するため、操作が高速化される。
このプロトコルは1998年、Pavel Machek が Midnight Commander 向けに設計したものである。
プロトコルのメッセージ クライアントは、以下のようなテキスト形式の要求を送る。
#FISH_COMMAND 引数列... 等価なシェルコマンド群 複数行にまたがることもある
FISHコマンドには優先順位がある。サーバは理解できるFISHコマンドを実行する。理解できない場合は、等価なシェルコマンドを実行しようとする。専用サーバプログラムが動作していない場合、UNIXのシェルはFISHコマンドをコメント行として無視し、等価なシェルコマンドだけを実行する。
サーバの応答は複数行にまたがるが、常に以下の行が末尾に付く。
### xyz<オプションテキスト>
はプレフィックス、 はリターンコードである。リターンコードはftpで使われているもののスーパーセットである。コード000と001は特殊で、その意味は最終行以前にサーバの出力があったかどうかで変わってくる。
セッション開始 クライアントは をリモートのマシンでコマンドとして実行することでSSHまたはRSHのコネクションを開始する。これにより、サーバ側で通常のRSHやSSHのコネクションとFISHのコネクションを区別することができる。
まず、サーバに対して と という2つのコマンドを送る。
#FISH echo; start_fish_server; echo '### 200'
#VER 0.0.2 <feature1> <feature2> <...> echo '### 000'
サーバは VER コマンドに対して、次のような応答を返す。 VER 0.0.0 <feature2> <...> ### 200 これは、サポートされているFISHプロトコルのバージョンと、サポートされている拡張機能を示している。
実装 Midnight Commander Lftp fish:// KDE kioslave (with Konqueror)
外部リンク README.fish from Midnight Commander kio_fish page KDE documentation Tutorial for the kioslave