LoginSignup
29
16

More than 5 years have passed since last update.

MacからSSHしてロケールのエラーが出た時の対処

Last updated at Posted at 2015-08-28

事象

SSHで本番環境にログイン後、capistranoでデプロイ中に、以下のようなエラーになった。

ArgumentError: invalid byte sequence in US-ASCII
 (中略)
error: invalid byte sequence in US-ASCII

原因

http://yano3.hatenablog.jp/entry/2012/11/25/234244
私の場合は、こちらに書いてあることが、まんまソレでした。
SSH側でenvを確認して、こんな感じだったらおそらくビンゴ。

$ env | grep -e LANG -e LC_CTYPE
LANG=en_US.UTF-8
LC_CTYPE=UTF-8

とりあえずの対処として、SSH先のLC_CTYPEを、例えばLANGと同じにしておくなど。でも再ログインすると元通りになってしまう。

export LC_CTYPE=en_US.UTF-8

原因が上記サイトに書かれているので引用します。

  • Mac の Terminal.app の Settings > Advanced > Set locale environment variables on startup がオンになっていると、 Mac 側で LC_CTYPE=UTF-8 が設定される。
  • Mac の /etc/ssh_configSendEnv LANG LC_* になっているので、 LC_CTYPE が ssh サーバに送信される。
  • Ubuntu の /etc/ssh/sshd_configAcceptEnv LANG LC_* になっているので、 Mac からの LC_CTYPE が Ubuntu に渡される。
  • UTF-8 というロケールはない (正しくは en_US.UTF-8 とか ja_JP.UTF-8) ので怒られる。

なるほど。ターミナルめ…

対処法

一番の原因であるターミナルの設定を変更しませう。
※ターミナルの設定を以下のようにすると、コンソール上で日本語が入力出来なくなってしまった。チェックは外さない方が良いみたい。/etc/ssh_confの設定のみ無効にしておく。

terminal.png

併せて、etc/ssh_configSendEnv も念のため無効にしておく

/etc/ssh_config
 Host *
 #   SendEnv LANG LC_*

ポエム

ロケールの設定って大変ややこしい。そしてローカライズを考えるたびに、USの勝ち組っぷりに嫉妬する。

29
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
16