-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory を解消する
まとめ
(1) .zshrc などで
export LC_CTYPE="ja_JP.UTF-8"
日本語ローカライズに非対応の場合は、
export LC_CTYPE="en_US.UTF-8"
(2) /etc/ssh/ssh_config の SendEnv LANG LC_* をコメントアウトする
経緯
ssh しようとして以下のエラーが出ることがある。
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
locale を見るとこのように LC_CTYPE が UTF-8 となっている。エラーメッセージは UTF-8 という locale がないと言っている。
$ locale LANG="" LC_COLLATE="C" LC_CTYPE="UTF-8" LC_MESSAGES="C" LC_MONETARY="C" LC_NUMERIC="C" LC_TIME="C" LC_ALL=
macOS では Terminal.app 起動時に以下の設定がオンな場合、LC_CTYPE="UTF-8" に設定される。

ssh する際に ssh_config の SendEnv LANG LC_* が有効で接続先の AcceptEnv LANG LC_* も有効な場合、LC_CTYPE="UTF-8" が ssh 先にも送られる。接続先に UTF-8 がない場合は -bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory とエラーになる。
このため解消するには、
.zshrcなどでexport LC_CTYPEするssh_configのSendEnv LANG LC_*を無効にする- Terminal.app を使わない
- Terminal.app の Set locale environment variables on startup をオフにする
という対策が考えられる。なお Terminal.app の設定を変えると日本語入力ができなくなるので注意。
私はたまに Terminal.app を使うのと、日本語ローカライズに対応している場合はその設定を使ってほしいので .zshrc に export LC_CTYPE="ja_JP.UTF-8" を書くことにした。