设置区域设置失败:通过 ssh 连接时强制设置某些区域设置

设置区域设置失败:通过 ssh 连接时强制设置某些区域设置

多年来,我一直遇到“设置区域设置失败”的问题。现在我明白了问题所在。在我的本地机器上,我的 LC_TIME 设置为自定义文件(“custom.UTF-8”)。我连接的任何远程机器上都不存在此自定义文件。但是,通过 SSH,我的区域设置被“导出”并在远程机器上搜索。所以这就是我不断收到以下信息的原因:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LC_TIME = "custom.UTF-8",
    LANG = "en_US.UTF-8"

我想要配置的是,本地 LC_TIME(或任何语言环境变量)永远不会被导出。我只需使用远程机器上定义的值就可以了。我应该如何定义它?

答案1

“阻止”环境导出的最简单方法是在服务器端的用户帐户中覆盖它们。为此,您可以创建一个.bashrc文件(或适合您的 shell 的初始化文件)并覆盖不需要的变量。

最小.bashrc文件示例:

unset LC_TIME

或者将变量设置为一些合理的值:

export LC_TIME=en_US.UTF-8

如果你真的想要阻止发送某些环境变量,那么您很可能需要在客户端和/或服务器计算机上拥有 root 访问权限。

在客户端,您可以编辑/etc/ssh/ssh_config和删除或更改该SendEnv行。当今大多数发行版都已将其设置为发送区域设置环境变量 ( LC_*)。

有一个用户配置文件 ( ~/.ssh/config),您也可以在其中设置SendEnv。但您只能从系统配置文件中追加到列表中,而不能覆盖。这就是为什么您只有拥有 root 访问权限时才能真正禁用此选项的原因。

或者,您可以在服务器端编辑(请注意处的/etc/ssh/sshd_config额外内容。代表守护进程)并删除或更改该行。当今大多数发行版都已将其设置为接受区域设置环境变量()。dsshd_configdAcceptEnvLC_*

SendEnv在手册页中查找ssh_配置AcceptEnv手册页中sshd_配置

为了完整性:PermitUserEnvironment在 中还有一个sshd_config。顾名思义,它允许用户设置一些文件来初始化一些变量。如果PermitUserEnvironment启用了 ,您可以作为用户处理其余的事情,但我从未遇到过PermitUserEnvironment启用了 的系统。

相关内容