多年来,我一直遇到“设置区域设置失败”的问题。现在我明白了问题所在。在我的本地机器上,我的 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
额外内容。代表守护进程)并删除或更改该行。当今大多数发行版都已将其设置为接受区域设置环境变量()。d
sshd_config
d
AcceptEnv
LC_*
SendEnv
在手册页中查找ssh_配置在AcceptEnv
手册页中sshd_配置。
为了完整性:PermitUserEnvironment
在 中还有一个sshd_config
。顾名思义,它允许用户设置一些文件来初始化一些变量。如果PermitUserEnvironment
启用了 ,您可以作为用户处理其余的事情,但我从未遇到过PermitUserEnvironment
启用了 的系统。