読者です 読者をやめる 読者になる 読者になる

ゆず日記

戦う Vimmer 兼 Dvorakユーザ 兼 Kinesisユーザ 兼 おぺらー が戦わないブログ

Macからmoshで接続しようとするとエラーになったお話。

現象

  • iTerm2でmoshコマンドを使うとエラー出て接続できない。
  • Terminalでもダメ。
  • sshは接続できる。
  • 他のMacからならmoshも接続できた。
$ mosh vps
The locale requested by LC_CTYPE=UTF-8 isn't available here.
Running `locale-gen UTF-8' may be necessary.

The locale requested by LC_CTYPE=UTF-8 isn't available here.
Running `locale-gen UTF-8' may be necessary.

mosh-server needs a UTF-8 native locale to run.

Unfortunately, the local environment (LC_CTYPE=UTF-8) specifies
the character set "US-ASCII",

The client-supplied environment (LC_CTYPE=UTF-8) specifies
the character set "US-ASCII".

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: LC_ALL?????????????????????: ??????????????????????
LANG=ja_JP.UTF-8
LC_CTYPE=UTF-8
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=
Connection to example.sakura.ne.jp closed.

結論

結論からいうと、

  • クライアント側であるMacの設定が原因
  • サーバ側関係ない
  • Terminal, iTerm2 設定見直したら直った

解決に至るまで

エラーメッセージからLC_CTYPEとLC_ALLにアタリを付けてたので、
sshで接続したサーバでlocaleコマンド実行

サーバのlocale

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

サーバはさくらVPS CentOS(デフォルトでja_jp.UTF-8) で特に問題なし

正常に接続可能なMacのlocale

connectable-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=

接続不可能なMacのlocale

unconnectable-mac $ locale
LANG="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_CTYPE="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=

LC_CTYPE="UTF-8" が原因っぽいということで、
Mac から Ubuntu に ssh ログインするとなんかロケール云々で怒られるやつ - 休刊 ボルシチは食べ物です。 でも近しい事例があったのでTerminal, iTerm2 の設定を変更してみた。

Terminal はここのチェックを外す
f:id:Yuzuemon:20131011025417p:plain

iTerm2 はここのチェックを外す
f:id:Yuzuemon:20131011025410p:plain

直りました。
(多分iTerm2アップデートした時に変わっちゃったのかな)

オマケ

参考にさせてもらった Mac から Ubuntu に ssh ログインするとなんかロケール云々で怒られるやつ - 休刊 ボルシチは食べ物です。 に載っている /etc/ssh_config (実体は/private/etc/ssh_config) が面白い。
SSH_CONFIG (5) を読むとサーバ側(/etc/ssh/sshd_config)で AcceptEnv LC_CTYPE されていれば、Terminal設定でも /etc/ssh_configでも ~/.ssh/ssh_config でも環境変数が渡せるようなので、例えば LC_CTYPE="en_US.UTF-8" とdefaultで英語に設定されているサーバでも "ja_JP.UTF-8" にできちゃったりするみたい。