解決遠端 SSH 連線主機時文字編碼設定 locale 錯亂問題

本篇文章更新時間:2019/02/16
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣新台幣 贊助支持。


文字編碼錯亂

其實也忘記我 Mac 在換 Oh-My-Zsh 前 Bash 是不是也有這問題XD

但! 碰到問題就來解才是有趣的地方

剛好這幾天都有直接連上主機修改檔案的需求,偏偏原本看起來正常的中文 UTF8 編碼卻很有事的亂了調,怎麼查也都是 UTF8 連線,沒什麼大問題,深入去了解 SSH 與 locale 設定的關係才知道不得了,太貼心。

SSH 有個參數( AcceptEnv )預設可以接收來自 client 連線時帶入的語系編碼參數搭配顯示

AcceptEnv LANG LC_*

而在 client 端也有個預設的參數( SendEnv ),預設會傳送本地語系編碼

SendEnv LANG LC_*

兩邊一搭一唱就把這整個亂碼事件給串起來,Mac 預設的參數 LC_CTYPE="zh_TW.UTF-8" 在遠端機器上沒有,而收到這參數的主機就會造成顯示錯誤。

解決辦法

  1. 改本機的 locale 設定,在 ~/.bash_profile 或是 ~/.zshrc 裡 export LC_CTYPE="en_US.UTF-8" ,讓傳送時以預設語系編碼方式帶入,需重啟終端。(推薦作法,傳送預設設定即可)
  2. 改本機 ssh_config 檔中的 SendEnv ,將此段註解後重啟服務。(以後都不傳送了的意思)
  3. 改遠端 sshd_config 檔中的 AcceptEnv ,將此段註解後重啟服務。(以後都不接收了的意思)

以改變與設定彈性來看,第一個解決辦法是比較沒可能出事拉,至於其他方式手段都稍微硬了點,使用前請自行斟酌XD

參考資料:

  1. Locale variables have no effect in remote shell

  2. Inside screen over ssh, the default prompt not showing


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[///////////____36%_________]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


文章
Filter
Apply Filters
Mastodon