ヘプタゴンの技術ブログ

サーバ/ネットワーク/linux/AWSとか青森を拠点でやってます

Sshの代替サービスmoshをubuntuに入れてみる

moshはsshの代替サービスとして開発されたソフトウェア。

the MObile SHell“が由来ということで、
モバイルデバイスからでも操作がしやすい工夫が施されている。

【特徴】
1、ローカルエコーなのでサクサク。
sshは入力した情報を一旦サーバに送り
その結果をサーバから受け取り表示する(リモートエコー)ので、
回線が細いと入力と表示にタイムラグがあり、イライラ・・・

moshはサーバへ入力情報を送ると同時に
送った情報を表示する(ローカルエコー)ので、
回線に関係なく入力が手元に即座に反映される。

2、一度切断しても自動で再接続:接続元IPが変わっても問題なし。
UDPを使いセッションを張らずに通信していて、
一旦サーバとの接続が切れても、
サーバとクライアント間の通信環境が整えば自動で再開される。
IPが変わっても関係なく再接続される。

インストール環境
クライアント:macOS mountain lion
サーバ:ubuntu 12.04
※ユーザー認証はSSHを使うのでSSHの設定は必要です。

まずはmac側。

https://github.com/downloads/keithw/mosh/mosh-1.2.1.pkg

からパッケージをダウンロードしてインストール。

ubuntu側

aptitude install mosh

&環境に合わせてファイアウォール等のUDPの60000から61000を解放。

クライアントから

mosh --ssh="ssh -p sshのポート番号 -i 認証鍵" ユーザー名@サーバ

で繋がるはずが、

mosh-server: invalid option -- 'l'
Usage: mosh-server new [-s] [-i LOCALADDR] [-p PORT] [-c COLORS] [-- COMMAND...]
mosh-server: invalid option -- 'l'
Usage: mosh-server new [-s] [-i LOCALADDR] [-p PORT] [-c COLORS] [-- COMMAND...]
mosh-server: invalid option -- 'l'
Usage: mosh-server new [-s] [-i LOCALADDR] [-p PORT] [-c COLORS] [-- COMMAND...]
mosh-server: invalid option -- 'l'
Usage: mosh-server new [-s] [-i LOCALADDR] [-p PORT] [-c COLORS] [-- COMMAND...]
mosh-server: invalid option -- 'l'
Usage: mosh-server new [-s] [-i LOCALADDR] [-p PORT] [-c COLORS] [-- COMMAND...]
mosh-server: invalid option -- 'l'
Usage: mosh-server new [-s] [-i LOCALADDR] [-p PORT] [-c COLORS] [-- COMMAND...]
mosh-server: invalid option -- 'l'
Usage: mosh-server new [-s] [-i LOCALADDR] [-p PORT] [-c COLORS] [-- COMMAND...]
setlocale: No such file or directory
Connection to サーバ名 closed.
/usr/bin/mosh: Did not find mosh server startup message.

サーバを見ると

less /var/log/auth.log
Nov 26 21:55:11 サーバ名 sshd[15154]: Accepted publickey for ubuntu from クライアントIP port 63170 ssh2
Nov 26 21:55:11 サーバ名 sshd[15154]: pam_unix(sshd:session): session opened for user ユーザー名 by (uid=0)
Nov 26 21:55:12 サーバ名 sshd[15225]: Received disconnect from クライアントIP: 11: disconnected by user
Nov 26 21:55:12 サーバ名 sshd[15154]: pam_unix(sshd:session): session closed for user ユーザー

とsshでの認証まではうまく行っている模様。

setlocaleのエラーも出てるし文字コード周りが怪しかったので、確認。

ubuntu側

locale
--------------------
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
--------------------

mac側

locale
--------------------
LANG="ja_JP.UTF-8"
LC_COLLATE="ja_JP.utf-8"
LC_CTYPE="ja_JP.utf-8"
LC_MESSAGES="ja_JP.utf-8"
LC_MONETARY="ja_JP.utf-8"
LC_NUMERIC="ja_JP.utf-8"
LC_TIME="ja_JP.utf-8"
LC_ALL="ja_JP.utf-8"
-------------------

この辺りが噛み合ってない??

 

ということで、文字コードを指定して、

LC_ALL=en_US.UTF-8 mosh --ssh="ssh -p sshのポート番号 -i 認証鍵" ユーザー名@サーバ

でOKでした!