当我使用 putty 连接到我的 Linux 服务器(Ubuntu 14.04)时遇到了一些问题,因为 SSH 连接总是使用ANSI_X3.4-1968
作为字符集(的输出locale charmap
)。
但是我的系统配置为使用de_DE.UTF-8
可以看到cat /etc/default/locale
:
LANG=de_DE.UTF-8
LC_MESSAGES=POSIX
Putty 使用的连接配置文件UTF-8
如下远程字符集(窗口 -> 翻译)。我也尝试在这里使用该值de_DE.UTF-8
,但是没有任何变化。
奇怪的是,当我登录物理控制台并在locale charmap
那里执行时,我得到了正确和预期的结果:UTF-8
。
为什么使用 Putty (v0.67) 和物理控制台会得到不同的配置字符集?这是 Putty 配置问题,还是 Linux 服务器端的问题?
更新 1:
我还与/etc/pam.d/sshd
不受此问题影响的第二台类似服务器的文件进行了比较,发现两个文件完全相同。文件也是如此/etc/ssh/ssh_config
(两个文件都包含行SendEnv LANG LC_*
)。
我还执行了以下命令来确保语言环境没有缺陷:
sudo locale-gen --purge
sudo update-locale LANG=de_DE.UTF-8
答案1
这与 PuTTY 无关。您在那里配置的只是终端字符集,它告诉PuTTY如何解码它接收的文本 – 但不会以任何方式将其传递给服务器。
区域设置($LANG 等)由服务器本身加载 - 取决于发行版,可以source
通过从 shell 的启动文件(例如从 /etc/profile)中 -ing /etc/default/locale 来加载,或者通过使用 pam_env 模块通过 PAM 加载它。
在 Grep 中查找 PAM 配置中/etc/pam.d
提到的/etc/default/locale
。
如果您在应用程序配置中直接找到匹配的 pam_env 行(例如)
/etc/pam.d/login
,请将其复制到中大致相同的位置/etc/pam.d/sshd
。(请注意它在堆栈中的位置。)如果在共享配置中找到匹配的行
common-session
,请确保 sshd PAM 配置导入它(例如通过@include common-session
)。如果在 PAM 中找不到任何内容,请检查 shell 的启动文件。