多年来我一直遇到“设置区域设置失败”的问题。我现在明白了问题所在。在我的本地计算机上,我的 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 (或任何语言环境变量)永远不会导出。我只需使用远程计算机上定义的值就可以了。我该如何定义这个?
“阻止”环境导出的最简单方法是在服务器端的用户帐户中覆盖它们。为此,您可以创建一个.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
额外内容代表守护程序)并删除或更改该行。当今大多数发行版都已设置为接受区域设置环境变量 ( )。d
sshd_config
d
AcceptEnv
LC_*
在ssh_configSendEnv
的手册页和sshd_config的手册页中查找说明。AcceptEnv
为了完整起见:还有一个PermitUserEnvironment
in sshd_config
。顾名思义,它允许用户设置一些文件来初始化一些变量。如果PermitUserEnvironment
启用,您可以作为用户处理其余的事情,但我从未遇到过PermitUserEnvironment
启用的系统。
归档时间: |
|
查看次数: |
3144 次 |
最近记录: |