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

5 localization 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"
Run Code Online (Sandbox Code Playgroud)

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

les*_*ana 5

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

最小.bashrc文件示例:

unset LC_TIME
Run Code Online (Sandbox Code Playgroud)

或者将变量设置为某个合理的值:

export LC_TIME=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

在ssh_configSendEnv的手册页和sshd_config的手册页中查找说明。AcceptEnv

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