不安定な接続でも使えるリモート・シェルのプロトコル
概要 †
Mobile Shellの名のとおり、不安定な接続でも使えるリモート・シェルのプロトコル。 接続を切っても続きを操作できるという意味では、vncを使った方が楽なのだが、 ネットワーク帯域やサーバーのメモリー資源を無駄に使ってしまうのは問題だ。
現時点でポート転送やX11の対応は無いが iPhone や iPad / Android からコンソールレベルでエディタを使って操作したりするのには使えそうだ。screenコマンドと組み合わせて使えば、vncのような使い方も可能。
問題点 †
- &記号をつけてバックグラウンドで起動させたx11vncコマンドを起動すると、終了するまでログアウトできない
- iPhone/iPad + iSSH + mosh で切断せずにいると電池の消耗が激しい
- cygwin + mosh 1.2.3 でsshのポート番号を変えたサーバーに接続できない? → moshコマンドを入れ替えればOK
- cygwin + mosh + teraterm + emacs で Backspace を押すとヘルプが出てしまう → teratermの設定でBackspace=DELとすれば問題ない
- iPhoneから iSSH + mosh で使う場合、キー入力が多い場面で何らかの対策をしないと使いにくい → ホスト名の bash-complete を使う
- クライアントが切断処理をしないままクラッシュしてしまうと mosh-server プロセスが残骸として残り続けてしまう。kill したくてもどれが残骸のプロセスなのか分からない
- クライアントを接続したままサーバーを再起動すると再接続待機のままになってしまう。[Ctrl+^ .]を押せと出ているが、日本語キーボードの配列で押しても効かない。US配列で[^]は数字の6のシフトなので、[Ctrl+6 .]と押せば止めることができる
History †
- [2012/12/15] Sakura VPS で aptitude install mosh コマンドでインストール。 moshは squeeze の標準には含まれていないので backports を /etc/apt/source.list に加える必要がある。
- [2012/12/17] Windows PC の cygwin に mosh を入れて、Sakura VPS 側の iptables で udp 60000:61000 を開けてログインしてみるが、下記のエラーでつながらない。
$ mosh sakura-vps mosh: failed to connect to host *** port *** ssh_exchange_identification: Connection closed by remote host mosh: Did not find remote IP address (is SSH ProxyCommand disabled?).
- Sakura VPS側のIPv6 (6rd) を無効にしてみたが変化なし
- sshに-vオプションをつけてみたがわからず
$ mosh --ssh="ssh -v" sakura-vps OpenSSH_6.1p1, OpenSSL 1.0.1c 10 May 2012 debug1: Reading configuration data /home/otsuka/.ssh/config debug1: /home/otsuka/.ssh/config line 3: Applying options for sakura-vps debug1: /home/otsuka/.ssh/config line 8: Applying options for * debug1: Executing proxy command: exec 'mosh' --fake-proxy -- *** *** debug1: permanently_drop_suid: 1001 debug1: identity file /home/otsuka/.ssh/id_rsa type -1 debug1: identity file /home/otsuka/.ssh/id_rsa-cert type -1 debug1: identity file /home/otsuka/.ssh/id_dsa type -1 debug1: identity file /home/otsuka/.ssh/id_dsa-cert type -1 debug1: identity file /home/otsuka/.ssh/id_ecdsa type -1 debug1: identity file /home/otsuka/.ssh/id_ecdsa-cert type -1 mosh: failed to connect to host *** port *** ssh_exchange_identification: Connection closed by remote host mosh: Did not find remote IP address (is SSH ProxyCommand disabled?).
- [2012/12/17] 別の Linux PC (Debian 6.0 squeeze) にmoshを入れてアクセスしてみると簡単につながる
- 「WindowsのCygwin環境でmoshを使ってみた - ナレッジエース」にあるように手動で mosh-server と cygwin をつないだらうまくいく。
cygwinでの接続には問題があるようだ。
- Cygwin build works in general, but Perl part does not · Issue #164 · keithw/mosh · GitHub のやりとりにある http://codepad.org/SnjyALGm を使うとうまくいく。
- cygwin の /usr/bin/mosh.exe は 1.2.3 で perl script ではなくバイナリ実行ファイルだ
- /usr/bin/mosh.exe で同じLAN内のサーバーへの接続はうまくいく。Sakura VPS では sshのポート番号を変えているからかもしれない。
- teraterm+cygwinでBSが効かない、DELだと大丈夫
- [2012/12/18] iPhoneの端末ソフト(iSSH) のアプリケーション内課金で Mosh Protocol を85円で購入
- 接続したままスリープさせても復帰させれば続けて操作できるようだが、 スリープ状態で置いておくと電池の消耗が激しい
- agent転送ができないので、Sakura VPSから別のサーバーへsshでつなぐのは工夫が必要
bash completion †
長いホスト名をキー入力する場合、TABキーで補完してくれる機能が bash completion で、Debianで有効になっている。 また、sshで一度接続したことのあるホストは ~/.ssh/known_hosts というファイルにホスト鍵と一緒に保管される。
sshに限らずシェルコマンドでホスト名が必要な個所で TAB キーを押すと /etc/hosts や known_hosts 等に書かれているホストを候補に上げてくれる。 ところが、sshのあるバージョンから、known_hostsファイルをハッシュ化して保存するのがデフォルトになってしまい、 TABキーを押した際の候補に出なくなってしまっている。 iPhone等でmoshを使って操作する際、できる限り補完機能を使いたいので、 known_hostsを候補に出してほしいところではある。
known_hostsをハッシュ化して保存しないようにするには、~/.ssh/config に HashKnownHosts no と書けばよい。 既存の known_hosts を known_hosts.hashed というように名前を変えてから config に HashKnownHosts no を加えて、 いつも使うホストに ssh で接続していけば、ハッシュ化していない known_hosts が得られる。*1 known_hostsファイルをハッシュ化しなければならない理由は調べていないが、盗み見対策なら chmod 600 ~/.ssh/known_hosts しておけば大丈夫な気がする。