更新 1:

更新 1:

当我使用 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 的启动文件。

相关内容