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

多年来,我遇到了“设置区域设置失败”的问题。 我现在明白了这个问题。 在我的本地机器上,我的LC_TIME被设置为一个自定义文件(“custom.UTF-8”)。 此自定义文件不存在于我连接的任何远程计算机上。 但是,通过SSH我的区域设置是“导出”,并在远程机器上search。 所以这就是为什么我不断得到:

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" 

我想要configuration的是本地LC_TIME(或任何语言环境variables)永远不会被导出。 我很好,只是使用在远程机器上定义的值。 我应该如何定义这个?

防止“导出”环境的最简单方法是在服务器端覆盖它们。 创build一个.bashrc文件(或适当的shell初始化文件)并覆盖variables。

例如:最小的.bashrc文件

 unset LC_TIME 

或者,将该variables设置为一个合理的值:

 export LC_TIME=en_US.UTF-8 

如果你真的想阻止发送一些环境variables,那么你很可能需要在客户端和/或服务器机器上进行root访问。

在客户端,您可以编辑/etc/ssh/ssh_config并删除或更改SendEnv行。 今天的大多数发行版都设置为发送语言环境variables( LC_* )。 作为用户,您只能追加到此列表,而不能覆盖。 这就是为什么只有当您拥有对计算机的root权限时才能禁用此选项的原因。

或者,在服务器端,您可以编辑/etc/ssh/sshd_config并删除或更改AcceptEnv行。 今天的大多数发行版都设置为接受语言环境variables( LC_* )。

在ssh_config的手册页中查找SendEnv的解释,在sshd_config的手册页中查找SendEnv的解释。

为了完整起见: sshd_config还有一个PermitUserEnvironment 。 顾名思义,它允许用户设置一些将初始化一些variables的文件。 如果启用了PermitUserEnvironment则可以照顾其余的用户,但是我从未遇到启用PermitUserEnvironment的系统。