#16 「moshは確かにイノベーション」 tech.kayac.com Advent Calendar 2012

初めまして。HTMLファイ部兼ダーツ部のkubota(@kubosho_)です。
最近はAndroidブラウザーのレンダリングエンジンの気持ちになりながら仕事をしています。

このエントリーはtech.kayac.com Advent Calendar 2012 16日目の記事です。

Vimまじイノベーション

さて、テーマが「私の中のマイイノベーション 2012」ということで、今年はいろいろとイノベーションがあったのですが、その中でもイノベーションだったのが「Vim」でした。

元々Emacs派だったのですが、弊社HTMLファイ部の部長である@edo_m18に「Vimいいよいいよ」と洗脳おすすめされた結果、Vimを使い出して今では8:2くらいの割合でVimを多く使っています。

しかし、それよりももっとイノベーションを起こしたものが昨日できました。
それがmoshです。

moshまじイノベーション

元々は@typester#14 「2012年 私の中のマイイノベーション」tech.kayac.com Advent Calendar 2012の記事を見て、

「なんだか良さげだし試しにインストールしてみるかー」

と軽い気持ちで、インストールしてみて使ってみたのですが、結果として日頃SSHに対して感じていた不満点が解消されて、「moshまじイノベーション!」と1人で盛り上がってました。

moshの特徴

自分がなぜmoshがイノベーションかと思ったか。
思うきっかけになった特徴を、mosh: MITからモバイル時代のSSH代替品 - karasuyamatenguの日記の記事から引用すると、以下の2つです。

・遅いリンクでもローカルエコーにより快適
・断続的な接続でも平気

では、1つずつ書いていきます。

遅いリンクでもローカルエコーにより快適

よくあるのが、ネット接続が遅い環境だとリモートサーバーにSSHで接続した場合、打ち込んだコマンドがなかなか反映されずザ・ワールド状態になってしまうことです。

しかしmoshの場合は、とりあえずコマンドは打てて、リモートサーバー上に反映されていない箇所は下線が引かれます。 「なんのコマンドを打ち込んだか画面に反映されないから分からない!」ということがなくなり、とても快適になりました。

断続的な接続でも平気

例えば、電車内でリモートサーバーにつないで何か作業をするということもあると思います。 そんな時に、電車がトンネルなどに入って接続が切れると再接続になってしまったり、最悪の場合接続した画面のままフリーズしてしまうこともあります。

しかしmoshの場合は、ネット接続が復活した時に、再接続の手間がなく何事も無かったかのようにそのままリモートサーバーで作業ができます。

さすがプロトコルとアプリケーションを同時に作ってしまっただけあって、これだけでもイノベーションすぎます。MITすごい。

moshのインストール

さてべた褒めしてきたmoshですが、「そんな事言ってもインストールが大変なんでしょ?」と思っている人もいると思います。

実際、自分がmoshをインストールするときに色々と調べたのですが、git cloneして、./configureして、makeして…と面倒なインストール方法しか最初見つからなかったため、インストールを一瞬諦めかけました。

しかし冷静に公式サイトを見てみると、自分がさくらのVPSにインストールしているDebian バージョン6.0.6(squeeze)であれば、backportsというのを追加するだけでaptitudeでインストールできるようになりました。

具体的な方法としては以下の通りです。

ローカル側

自分はMac OS X Lion + Homebrewという環境なので、以下のコマンドをターミナル上から実行します。

brew install mobile-shell

これだけで、ローカル側は終わりです。

リモート側

sources.listにbackports追加

sudo vim /etc/apt/sources.list

おもむろにsources.listを開き、最後の行あたりに以下の行を追加します。

deb http://backports.debian.org/debian-backports squeeze-backports main

update && install

追加し終えたらパッケージのアップデートを行います。

sudo aptitude update

アップデートが終わったら、moshをインストールします。

sudo aptitude install mosh

インストールが終わり接続テストと行きたい…ところですが、ポートをUDP 60000:61000を開けてやらないと、Ctrl-^でキャンセルしない限り永遠に接続待ちの状態になってしまいます。
なので、iptablesの設定でポートを開放します。具体的には以下のような感じです。

sudo vim /etc/iptables/rules

# moshのために以下の行を追記
-A INPUT -p udp -m udp --dport 60000:61000 -j ACCEPT

これでリモート側の準備は完了です。

moshを使う

SSHで接続する場合「ssh example.com」とコマンドを打って実行すると思います。

moshの場合でもそれは変わりなく、sshの部分をmoshとして「mosh example.com」とするだけです。
これだけでmoshが使えます。まじイノベーション。

ちょっと待って!俺SSHのポートも変えてるしユーザー名も違うのにしてSSH接続してるよ!><

そんなあなたでも大丈夫。以下のようにするだけです。

mosh --ssh="ssh -p ポート -l ユーザー名" example.com

これでポートを変え、かつユーザー名も違う名前で接続していた場合でも、問題なくmoshが使えます。
まじイノベーション。

まとめ

  • ネットワークが遅かったり不安定でも、問題なくリモートサーバーに繋げっぱなしにできる
  • なので、対応がいつどこで起きるかわからないインフラの人に向いてるかも
  • インストールも割と簡単
  • SSHの接続ポートを変えたり、ユーザー名を違うものにしてSSH接続していても対応できる

明日は@Maco_Tasuの記事です。お楽しみに!