Files transferred over shell protocol

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プロトコルの詳細や実装についてさらに深く理解するのに役立ちます。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。