ローリングコンバットピッチなう!

AIとか仮想化とかペーパークラフトとか

ブラウザ上で動作するターミナルエミュレータwettyを試す

wettyの紹介

wettyはブラウザ上で動作するターミナルエミュレーターです。
node.js環境で動作し、HTTPS通信を終端してssh接続に変換します。

ブラウザ画面を一般的なターミナルエミュレーター化し、エスケープシーケンスに対応させる事で、CLI用に開発された各種ソフトウェアをブラウザ上で動作させることが出来ます。例えばcurseやncurseで作成された文字端末用のアプリケーション等です。

古くはajaxtermという同種のオープンソースソフトウェアがありますが、wettyはwebsocketを使い、ajaxtermよりも軽快に動作します。

ソースはgithubで公開されています。

github.com

最近cursesで作成されたプログラムをターミナルエミュレーターをインストールしていない環境で動かしたいと思い、調べたところこのソフトに行き当たりました。

インストールしてみる

最初はgithubのソースをcloneしてREADMEの指示通りにビルドしたのですが、nodeや関連パッケージの依存性関連でエラーが出まくり、エラーを潰して起動したのですが、sshでログインまでは出来るものの、直後に切断されてしまう事象が発生。

色々調べたものの、原因に行き着かず、自前ビルドでの利用を断念。dockerイメージが公開されているのでそれを引っ張ります。

docker イメージはdocker hubに公開されており、dockerインストール済みの環境なら

$ docker pull wettyoss/wetty

だけで引っ張ってくる事が出来ます。

起動

下記で起動します

$ docker run --rm -p 3000:3000 wettyoss/wetty --ssh-host=<接続先IPアドレス>

接続先IPアドレスはdockerを起動したサーバー自身でも別のサーバーでもOKです。
指定されたIPアドレスssh接続されます。

また上記の起動方法ではブラウザからはHTTP接続になりますが、オプションでSSL証明書と鍵を設定すれば、HTTPS接続にできます。

ブラウザでアクセス

http://<接続先IPアドレス>:3000/wetty/に接続します。

#本当はHTTPS化するべきですが、とりあえずHTTPで。
以下の例では接続先IP=192.168.11.252としています。

f:id:RC30-popo:20210126223515p:plain

ユーザー名とパスワードを入れて普通にログイン出来ます。

f:id:RC30-popo:20210126223742p:plain

いくつかコマンドを試してみる

topコマンド、普通に表示できています。
自動的に表示も更新されていきます。
f:id:RC30-popo:20210126223933p:plain

viで日本語を含むpythonソースを開いたところ。
UTF-8環境であれば、日本語の入力も問題ありませんでした。
f:id:RC30-popo:20210126224231p:plain

表示しているソースはこちらのqiitaの記事の載っているpythonで動くデータ可視化ライブラリdash入門用チュートリアルです。
qiita.com


VM上で動かして、ホストOS上で動くchromeからアクセスしたので、物理ネットワークは一切経由していない条件ですが、コマンド入力、応答は特にもたつく事はありませんでした。

個人的にはあまり使い所は無いですが、状況によって有用なケースがありそうです。