linux語言環境變量

P.S. 本文不講linux如何配置語言環境變量linux

現象

服務器明明配置的是英文,可是使用不一樣的機器ssh登陸服務器時,發現服務器的系統語言有時中文有時英文
使用locale命令執行後發現,不管locale.conf配置的是什麼,實際的語言環境都在變centos

[root@lc-dev ~]# cat /etc/locale.conf 
LANG="en_US.UTF-8"
[root@lc-dev ~]# locale
LANG=zh_CN.UTF-8
LANGUAGE=zh_CN:en_US:en
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC=zh_CN.UTF-8
LC_TIME=zh_CN.UTF-8
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY=zh_CN.UTF-8
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER=zh_CN.UTF-8
LC_NAME=zh_CN.UTF-8
LC_ADDRESS=zh_CN.UTF-8
LC_TELEPHONE=zh_CN.UTF-8
LC_MEASUREMENT=zh_CN.UTF-8
LC_IDENTIFICATION=zh_CN.UTF-8
LC_ALL=

猜想應該是ssh登陸的時候幹了什麼,而後使用ssh登陸時的-v參數看下登陸過程當中的調試信息,發如今經過認證最後登陸前,有一個發送環境變量的動做服務器

maming@maming-Home:~$ ssh -v root@192.168.2.2
OpenSSH_6.6.1, OpenSSL 1.0.1f 6 Jan 2014
# ...
# 此處省略了一些沒用的輸出
# ...
debug1: Sending environment.
debug1: Sending env LC_PAPER = zh_CN.UTF-8
debug1: Sending env LC_ADDRESS = zh_CN.UTF-8
debug1: Sending env LC_MONETARY = zh_CN.UTF-8
debug1: Sending env LC_NUMERIC = zh_CN.UTF-8
debug1: Sending env LC_TELEPHONE = zh_CN.UTF-8
debug1: Sending env LC_IDENTIFICATION = zh_CN.UTF-8
debug1: Sending env LANG = zh_CN.UTF-8
debug1: Sending env LC_MEASUREMENT = zh_CN.UTF-8
debug1: Sending env LC_TIME = zh_CN.UTF-8
debug1: Sending env LC_NAME = zh_CN.UTF-8
Last login: Sat Nov 11 19:20:26 2017 from 192.168.2.192
[root@lc-dev ~]#

結論

因此可知,使用ssh登陸的時候,ssh會將客戶端語言相關的環境變量同時發送過去,設置目標服務的環境變量。好比若是客戶端是中文,發過去就是中文配置,至關於在服務器上執行了下 export LANG=zh_CN.UTF-8 命令,因此在服務器上使用locale看到的就是中文的字符界面ssh

解決

那若是想服務器始終保持本身配置的語言環境的話,能夠經過如下2種方式實現。google

第一種修改客戶端的ssh配置,註釋掉/etc/ssh/ssh_config文件中SendEnv LANG LC_*這一行,在登陸的時候不發送環境變量
第二種修改服務器的ssh配置,註釋掉/etc/ssh/sshd_config文件中AcceptEnv LANG LC_*這一行,拒絕接收客戶端發送來的環境變量spa

若是是修改服務器的ssh配置,須要重啓sshd服務debug

# centos 6.x 環境
[root@lc-dev ~] /etc/init.d/sshd restart

# centos 7.x 環境
[root@lc-dev ~] systemctl restart sshd

# other 環境
# 自行google.com重啓sshd服務的方法
相關文章
相關標籤/搜索