AJAX SSH作ってみた

Ajax で SSHクライアントを作ってみた。

ajaxssh
デモページ

IE では動きません。firefox での動作を確認してます。
IE で動かないのは
xmlhttprequest.readystate == 3
で途中まで届いているデータを取ることができないから。
もしうまい方法知っている方がいれば、是非教えてください。

Ajax で SSHクライアントを作る問題点は、
Ajax(というよりHTTP)がstatelessだということです。
ssh はコネクションを切らずに状態が遷移しますから、
データを POST するたびに毎回サーバ側で ssh を exec するような実装では
ちゃんとした ssh クライアントとして動作しないわけです。
(cd とかしても次にコマンドを送信するときはカレントディレクトリが元の位置に戻る)

そこでサーバ側でデーモンを動かして、デーモン経由で ssh と通信するようにしました。
これなら ssh を終了することなくデーモン経由でコマンドを送信することができます。
具体的な通信経路は次のようになります。


ブラウザ
↑↓ xmlhttprequest
ssh.php
↑↓ named pipe
ssh-wrapper(daemon)
↑↓ pseudo terminal
ssh


ブラウザは xmlhttprequest で ssh.php と通信します。
コマンドを実行するたびに ssh.php にデータを POST して
結果を受け取ります。

ssh.php は一番最初は ssh-wrapper を起動します。
ssh.php は名前つきパイプ経由で ssh-wrapper と通信します。

ssh-wrapper はデーモンプログラムで実行するとバックグランドに移行します。
擬似端末を作成し ssh を起動します。ssh とはこの擬似端末経由で通信します。
最初双方向パイプで ssh と通信しようと思ったのだけど、
ssh が制御端末にデータを出力する部分があるので擬似端末経由にしました。
名前つきパイプを作成し、ssh.php とはこの名前つきパイプ経由でデータ通信します。

ソースコードを一応置いておきました。
分かる人だけ自分の環境に入れてみてください。


追記:
パスワードの入力でさえも画面に表示されてしまうという恐ろしい仕様w
だったのですが、修正してパスワード入力の場合は画面に表示されないようにしました。

トラックバック(5)

このブログ記事を参照しているブログ一覧: AJAX SSH作ってみた

このブログ記事に対するトラックバックURL: http://blog.bz2.jp/bz2mt/mt-tb.cgi/65

ゆうすけブログ (BIGLOBE) - ajax から ssh する (2005年9月 1日 10:16)

ajax から ssh するのは、ステートレスの壁を越えて頑張っていて面白い! 続きを読む

まだ存在していないもの コンソールアプリケーション TeraTerm的なもの 伺か Googleデスクトップのプラグインで実現出来ないか。 家計簿ソフト フ... 続きを読む

apus (PukiWiki/TrackBack 0.3) - Ajax/アプリケーション (2005年12月 3日 01:36)

パーソナライズドサービス Google Personalized start.com 画像関係 flickr Pxn8 検索エンジン Googl... 続きを読む

ajax で 手書き文字認識エンジン「巴」のデータを使った、オンライン手書き文字認識を公開されたサイトはありましたが、今度は Flash でフロントエンドを作ら... 続きを読む

Going where you really want to stay - AJAX SSH試用 (2006年3月25日 18:32)

ずっとWebブラウザから利用できるSSHクライアントを探していた。 色々探したが、要件を満たすものは無かった。 ・MindTerm ・CGI-Shell ... 続きを読む

コメント(17)

すごいじゃん!これ。
ライセンスはGPL?

どうも。ありがとうございます。
そういえばライセンスとかまだ考えてなかった。
とりあえずGPLにしようかなぁ。。。

おもしろい。

> きよたさん

どうもありがとうございますー

すごいね。
今度はこれで未踏いっとこう!
ソースレクチャーしてよ。

まあ、未踏に出すほどのネタじゃないよ。
技術的にはたいしたことしてないからw

また今度飲みにでも行きますか

うわ!本当に作ってる!
第1回PHP勉強会でのりで言ってみただけなのにw

そして気がつくのおそっ
勉強になりました。

どうも~

第1回PHP勉強会で誰か言ってたんですか?
僕は参加してないのでよく知らないです。。。

すごいっす。
ところで、ソース展開できないんですけど・・・

tar: これは tar の書庫ではないようです
tar: 次のヘッダをスキップします
tar: アーカイブに廃れた base-64 ヘッダが含まれています
tar: Read 160 bytes from ajaxssh-0.0.1.tar.gz
tar: 処理中にエラーが起きましたが、最後まで処理してからエラー終了させました

報告ありがとうございます
apache の設定がミスってたみたいです
修正しました

展開できました。
ありがとうございます。

初心者的な質問などしたいのですが、ここのコメントでしてよろしいでしょうか?

はい、いいですよ
遠慮なく

hi,
can you translate this "about ajax ssh" site into english?
That would be nice. It looks like an interesting tool.

MfG Andi

Hi,
could you translate this page into english, please?
it looks like an interesting tool, but i can't read anythink.

Thanks in forward.

Andi

I'll give it a try.
Just a moment please.

おお、本当にmasatoさんでした!お世話になります。

最近は
 http://oss.moongift.jp/intro/i-2917.html
なものまでありますので、負けずに何卒次の展開を!

どうも!!

気が向いたら次の展開考えてみますー

ウェブページ

Powered by Movable Type 4.21-ja

このブログ記事について

このページは、masatoが2005年9月 1日 03:11に書いたブログ記事です。

ひとつ前のブログ記事は「フォト蔵リニューアル」です。

次のブログ記事は「未踏ユースブースト会議」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。