使用ssh命令连接远程服务器出现如下报错提示:
[root@localhost opc]# ssh 192.168.10.3
Last login: Mon Aug 24 17:30:59 2020 from 192.168.10.74
-bash: warning: setlocale: LC_ALL: cannot change locale (C.UTF-8)
/bin/sh: warning: setlocale: LC_ALL: cannot change locale (C.UTF-8)
本地化是指不同地区用户在键盘上输入不同语言的字符集。例如 en_US 表示美国英语字符集,因此只有正确设置了服务器的字符集,服务器才能理解用户的输入字符。
出现以上问题是因为服务器无法理解 C.UTF-8
字符集,因此首先在服务器上要有C.UTF-8
字符集才行,下面来分别看下两台服务器的字符集,如下所示:
A服务器:
[root@localhost ~]# locale -a
C
C.UTF-8
POSIX
en_US.utf8
[root@localhost ~]# locale
LANG=C.UTF-8
LANGUAGE=C.UTF-8
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_PAPER="C.UTF-8"
LC_NAME="C.UTF-8"
LC_ADDRESS="C.UTF-8"
LC_TELEPHONE="C.UTF-8"
LC_MEASUREMENT="C.UTF-8"
LC_IDENTIFICATION="C.UTF-8"
LC_ALL=C.UTF-8
B服务器(192.168.10.3):
[root@server ~]# locale -a | grep "C.UTF-8"
[root@server ~]# locale -a | grep "en_US.utf8"
en_US.utf8
由此可以看出本地服务器上的默认字符集为C.UTF-8
,而我们需要登录的远程服务器上却没有C.UTF-8
字符集,所以出现报错。那么解决办法有两个,一是在远程服务器上安装C.UTF-8
字符集;二是切换本地服务器的默认字符集为en_US.utf8
,因为在远程服务器上是有en_US.utf8
字符集的。
下面我们使用第二种方法进行设置:
[root@localhost ~]# vim /etc/profile.d/locale.conf
export LANG=en_US.utf8
export LC_ALL=en_US.utf8
[root@localhost ~]# source /etc/profile.d/locale.conf
然后重新登录远程服务器,命令如下:
[root@localhost ~]# ssh 192.168.10.3
Last login: Mon Aug 24 18:42:07 2020 from 192.168.10.74
[root@server ~]#
#可以看到,现在已经不会在报错了