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.
解決に至るまで
エラーメッセージから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=
正常に接続可能な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 はここのチェックを外す
iTerm2 はここのチェックを外す
直りました。
(多分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" にできちゃったりするみたい。