2015年5月9日土曜日

FreeBSDとMacOS Xでmoshを使う

FreeBSD(9.1と9.2)とMacOS X(10.9.5)でmoshを使うように設定しました。

moshの紹介は以下にあります。
Moshを使ってみる
http://rcmdnk.github.io/blog/2014/06/30/computer-linux-mac/
よいのは次のような点です(上記のblogから引用させていただきます)。
  • Moshは特にMobile端末からsshでどこかのサーバーへ接続して ネットワークがとぎれとぎれ担ってしまうような場合にも 接続を維持できる様に(自動で再接続)してくれるプログラムです。
  • 接続認証にはsshを使いますが、サーバー側、クライアント側両側で プログラムを動かして別のポートを使って接続を行い、維持するようにします。
  • これらのプログラムはmoshコマンド実行時に自動的にスタートするので、 サーバー側でも先に動かしておく必要はありません。
moshはシステムの環境としてUTF-8を要求するので、会社と自宅のサーバーがja_JP.eucJPだったときには使えませんでした。最近になり、両方ともLANG=ja_JP.UTF-8に変更したので、moshを使ってみることにしました。
変更の経緯は簡単に以下にまとめています。
FreeBSDでconvmvを使ってファイルシステムのファイル名をEUCからUTF-8へ変換する
http://www.sakashita-net.jp/2015/04/freebsdconvmveucutf-8.html
Macでのインストールは、上記のblogにあるように、
  1. homebrewをインストールする
  2. brew install mobile-shellを実行
とするだけで簡単でした。またFreeBSDについては、portsを使ったので以下のようにしました。
# cd /usr/ports/net/mosh
# make
# make install
動作は、まずFreeBSDとMacOS Xでターミナルから自分のホストにログインしてみて試しました(sshでのログインなどが可能になっていることが前提です)。
これがうまくいったので、次は、MacOS Xから自宅のサーバーへのログインです。

自宅のサーバーはNATの中にあるので、 インターネット接続用ルーターにポート転送の設定が必要です。moshはsshにポートに加えて、60000〜61000番のUDPポートを使います。
Mosh (mobile shell)
https://mosh.mit.edu/

Mosh will log the user in via SSH, then start a connection on a UDP port between 60000 and 61000.
この60000~61000番のUDPポートをサーバーに転送するように設定します。たとえば、ix2105では以下のようにします。
interface GigaEthernet0.1
ip napt service mosh サーバーIPアドレス none udp 60000-61000
このようにしておいてから、MacOS Xから自宅サーバーへログインしてみます。
macosx$ mosh ユーザー名@自宅サーバー

自宅サーバー$
ssh接続ができているならこれでよいはずです。 sshのポートなどを変更している場合は、以下のように、mosh内部で利用しているsshコマンドへの引数を指定できます。たとえばsshのポート番号を指定したい場合には、以下のようにします。
mosh --ssh="ssh -p 2222" ホスト