mosh: MITからモバイル時代のSSH代替品
- ローミング可能
- 断続的な接続でも平気
- ローカルエコーで快適なレスポンス
などの機能をそなえたSSH代替ターミナルソフト。その名も「モッシュ」
iPhone/iPadでウロウロしながらサーバ作業をするのを想定しているようだ。ドキュメントやパッケージの充実度からしてもかなり高質のプロジェクト。こいつら本気でSSHを越えようとしている。
こんな能書き
- IPが変っても大丈夫
- スリープ後もターミナルが生きている
- 遅いリンクでもローカルエコーにより快適
- 要は素早く打ち込んでいるときにスクリーンが止っちゃうことがない
- フルスクリーンモードでも有効
- サーバ側と同期化されていない入力はアンダーラインで記される
- ルート権限がなくてもサーバのインストール可能
- ユーザ認証はSSHに任せている
- 頑丈なターミナルソフト
- Control-Cがいつでもきく
ローミングとか今やっていないので、全ての恩恵にはあずかれないが、いくつか検証できた。
- ラップトップをスリープさせて起した後、ネットワークが接続するとターミナルが生き返った。これだけでも使う価値あり。
- ローカルエコー: 素早く打ち込んでも全くラグがない。これは快適。
これならサーバにつなげっぱなしにしたターミナルをずっと開けていられる。カフェに移動したら再接続とかする必要がなくなる。
これだけでも凄いが、このプロジェクトは単にローミング可のターミナルを作ったのではない。State Synchronization Protocolという状態同期可プロトコルを開発し、moshはそれをもちいた「最初のアプリケーション」という位置付けになっている。単にGUI環境を作るのでなく、それを可能にするプロトコルとツールキットを開発したMITらしい壮大な発想だ。
学術的な話を読みたが、取りあえず使えるようにしよう。
「Getting Mosh」セクションに重なOS環境のパッケージが準備されている。
Lucidにはadd-apt-repository、apt-get update、installですんなり入った。
ソースからインストールする際のはprotocol buffersとboostライブラリとヘッダーが必要となるが、依存モジュールもちゃんと明記してある。
ライアントコマンドはなんとperlスクリプト。IO::Ptyが必要になる。debianならlibio-pty-perlで入る。あるいはcpan IO::Ptyで入れる。
$ mosh
Can't locate IO/Pty.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.1 /usr/local/share/perl/5.10.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .) at /usr/local/bin/mosh line 24.
BEGIN failed--compilation aborted at /usr/local/bin/mosh line 24.
$ mosh
Usage: /usr/local/bin/mosh [options] [--] [user@]host [command...]
--client=PATH mosh client on local machine
(default: "mosh-client")
--server=PATH mosh server on remote machine
(default: "mosh-server")--predict=adaptive local echo for slower links [default]
-a --predict=always use local echo even on fast links
-n --predict=never never use local echo-p NUM --port=NUM server-side UDP port
--help this message
--version version and copyright informationPlease report bugs to mosh-devel@mit.edu.
Mosh home page: http://mosh.mit.edu
とりあえずサーバに向けてみる
サーバ側にmoshがインストールされていないとエラーになる。sshがユーザのパス上のmosh-serverを探して立ち上げる。
$ mosh example.com
bash: mosh-server: command not found
Connection to example.com closed.
/usr/local/bin/mosh: Did not find mosh server startup message.