« フォト蔵リニューアル | メイン | 未踏ユースブースト会議 »

2005年9月 1日

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
だったのですが、修正してパスワード入力の場合は画面に表示されないようにしました。

投稿者 masato : 2005年9月 1日 03:11

トラックバック

このエントリーのトラックバックURL:
http://blog.bz2.jp/bz2mt/mt-tb.cgi/65

このリストは、次のエントリーを参照しています: AJAX SSH作ってみた:

» ajax から ssh する from ゆうすけブログ (BIGLOBE)
ajax から ssh するのは、ステートレスの壁を越えて頑張っていて面白い! [続きを読む]

トラックバック時刻: 2005年9月 1日 10:16

» Ajax/まだAjaxになっていないアプリ from apus (PukiWiki/TrackBack 0.3)
まだ存在していないもの コンソールアプリケーション TeraTerm的なもの 伺か Googleデスクトップのプラグインで実現出来ないか。 家計簿ソフト フ... [続きを読む]

トラックバック時刻: 2005年12月 2日 12:05

» Ajax/アプリケーション from apus (PukiWiki/TrackBack 0.3)
パーソナライズドサービス Google Personalized start.com 画像関係 flickr Pxn8 検索エンジン Googl... [続きを読む]

トラックバック時刻: 2005年12月 3日 01:36

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

トラックバック時刻: 2005年12月14日 12:54

» AJAX SSH試用 from Going where you really want to stay
ずっとWebブラウザから利用できるSSHクライアントを探していた。 色々探したが、要件を満たすものは無かった。 ・MindTerm ・CGI-Shell ... [続きを読む]

トラックバック時刻: 2006年3月25日 18:32

コメント

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

投稿者 こだま : 2005年9月 2日 10:18

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

投稿者 masato : 2005年9月 2日 10:53

おもしろい。

投稿者 きよた : 2005年9月13日 23:37

> きよたさん

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

投稿者 masato : 2005年9月14日 18:31

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

投稿者 kt : 2005年9月16日 16:23

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

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

投稿者 masato : 2005年9月18日 19:01

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

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

投稿者 MugeSo : 2005年10月29日 15:09

どうも~

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

投稿者 masato : 2005年10月30日 22:55

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

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

投稿者 光 : 2006年7月19日 12:54

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

投稿者 masato : 2006年7月20日 10:39

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

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

投稿者 光 : 2006年7月20日 11:34

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

投稿者 masato : 2006年7月20日 11:51

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

MfG Andi

投稿者 Andi : 2006年12月 8日 04:27

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

投稿者 Andi : 2006年12月 8日 04:29

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

投稿者 masato : 2006年12月 8日 06:07

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

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

投稿者 MOONGIFT : 2006年12月17日 23:09

どうも!!

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

投稿者 masato : 2006年12月18日 04:44

Thanks funny site hair analysis equine :((

投稿者 Qfqpinrw : 2008年6月30日 18:30

Best Site good looking cartoonporn 838

投稿者 Dvldmoeh : 2008年6月30日 19:47

real beauty page system analyst 8-OOO

投稿者 Vlsbvebm : 2008年6月30日 20:30

Wonderfull great site lindsay lohan porn =-[[[

投稿者 Rvfyntxk : 2008年6月30日 21:37

It's funny goodluck japorn >:-]

投稿者 Xxndtyra : 2008年6月30日 23:38

free preteen nude pics and videos

投稿者 osher : 2008年7月 7日 14:14

コメントしてください




保存しますか?