Files transferred over shell protocol(FISH)は、SSHやRSHといったリモート接続プロトコルを基盤とし、コンピュータ間でのファイル転送やリモートファイル管理を可能にするための
通信プロトコルです。
FISHの特徴
FISHの最大の利点は、サーバー側での実装の容易さにあります。サーバー側では、SSHまたはRSHに加え、
UNIXの標準的なユーティリティである`ls`、`cat`、`dd`などが利用可能であれば、特別なソフトウェアをインストールする必要なくFISHを使用できます。これにより、多くの
UNIX系システムで簡単にFISHを利用することができます。
さらに、オプションとしてFISH専用のサーバープログラム(`start_fish_server`)も提供されており、このプログラムを利用することで、
UNIXの
シェルを介さずにFISHコマンドを実行できるようになり、操作の高速化が期待できます。
このプロトコルは
1998年に、Pavel Machekによって、ファイルマネージャである
Midnight Commanderのために設計されました。
FISHプロトコルのメッセージ構造
クライアントからサーバーへのリクエストは、テキスト形式で送信されます。基本的な形式は以下の通りです。
FISH_COMMAND 引数列...
等価な
シェルコマンド群
(複数行にまたがることもあり)
`#FISH_COMMAND` はFISHのコマンドを示し、それに続く引数列がコマンドの詳細を指定します。また、FISHコマンドに対応する
シェルコマンドも記述されます。サーバーは、理解できるFISHコマンドを実行し、理解できない場合は、等価な
シェルコマンドを実行しようとします。専用サーバープログラムが動作していない場合は、
UNIXシェルがFISHコマンドをコメント行として無視し、等価な
シェルコマンドのみを実行します。
サーバーからの応答は複数行にわたることがありますが、常に以下の形式の行が末尾に付与されます。
xyz<オプションテキスト>
`###` はプレフィックス、`xyz` はリターンコードを示します。このリターンコードはFTPで使われているコードのスーパーセットであり、`000`と`001`のコードは、最終行以前にサーバーの出力があったかどうかによって意味が異なります。
セッション開始手順
クライアントは、SSHまたはRSH接続を確立後、リモートマシン上で次のコマンドを実行します。
echo FISH:;/bin/sh
これにより、通常のRSH/SSH接続とFISH接続をサーバー側で区別できます。
次に、クライアントはサーバーに `FISH` コマンドと `VER` コマンドを送信します。`FISH` コマンドはセッションの開始を通知し、`VER` コマンドはFISHプロトコルのバージョンと対応する拡張機能を伝えます。
FISH
echo; start_fish_server; echo '### 200'
VER 0.0.2 <...>
echo '### 000'
サーバーは、`VER` コマンドに対し、次のような応答を返します。
VER 0.0.0
<...>
200
この応答は、サーバーがサポートしているFISHプロトコルのバージョンと、サポートされている拡張機能を示します。
実装例
FISHプロトコルは、以下のソフトウェアで実装されています。
Midnight Commander: ファイルマネージャとして有名で、FISHプロトコルをサポートしています。
Lftp: コマンドラインベースのファイル転送プログラムで、FISHをサポートしています。
fish:// KDE kioslave (with Konqueror): KDE環境のファイルアクセスに使用されるkioslaveで、FISHプロトコルをサポートしています。
外部リンク
README.fish from Midnight Commander
kio_fish page
KDE documentation
* Tutorial for the kioslave
これらの情報源は、FISHプロトコルの詳細や実装についてさらに深く理解するのに役立ちます。