在使用SSH連線至Linux作業系統,並透過Shell執行SSH Host端的程式時,可能會因為設定上的問題而出現「Setting locale failed」的警告訊息,雖然不會影響程式運作,但是會讓主控台顯示出來的訊息不夠漂亮,看久了會令人覺得煩躁。



如下圖,執行「perl」程式的時候出現了「Setting locale failed」的警告訊息。

ssh-locale-warning

會出現這樣的警告訊息是因為「LANG」和以「LC」開頭的語言環境變數的設定有問題,而導致程式無法正常套用語言設定。如果您確定在本機的環境下,執行程式的時候並不會出現「Setting locale failed」的警告訊息,而是只有在透過SSH連線執行程式才會出現的話,就表示SSH伺服器的設定出錯了!

我們可以利用文字編輯器,查看SSH伺服器的「/etc/ssh/sshd_config」設定檔。例如以下指令,可以使用「vim」開啟「/etc/ssh/sshd_config」設定檔:

sudo vim /etc/ssh/sshd_config

ssh-locale-warning

接著尋找設定檔內有無「AcceptEnv LANG LC_*」之類的項目。如果有的話,將該行前面加上「#」來註解掉。這個設定值是允許客戶端(Client)的環境變數透過SSH套用到伺服器,如果有套用「LANG」和以「LC」開頭的語言環境變數,且客戶端和伺服器的系統語言設定並不相同的話,通常就會出現「Setting locale failed」的警告訊息,因為我們一般不會在伺服器上安裝兩種以上的語言。

ssh-locale-warning

改好設定檔後,使用以下指令重啟SSH伺服器。

sudo service ssh restart

ssh-locale-warning

如果沒有其它問題的話,重新進行SSH連線後,執行程式時就不會有「Setting locale failed」的警告訊息了!

ssh-locale-warning