修复SSH区域设置环境变量错误的3种方法
- 技术文档
- 2022.03.24
- 浏览:168
本文将向您展示3种修复SSH语言环境变量错误的方法。什么是语言环境变量?在Linux中,区域设置由四类环境变量组成:
- 语言
- 立法会全体议员
- LC_u*:LC_类型,LC_数字,LC_时间…
- 朗
这些环境变量定义Linux发行版上的系统语言、货币格式、日期和时间格式等。通过在terminal中运行locale命令,可以签出您的locale环境变量:
locale
样本输出:
LANG=zh_CN.UTF-8 LANGUAGE=zh_CN LC_CTYPE="zh_CN.UTF-8" LC_NUMERIC=en_US.UTF-8 LC_TIME=en_US.UTF-8 LC_COLLATE="zh_CN.UTF-8" LC_MONETARY=en_US.UTF-8 LC_MESSAGES="zh_CN.UTF-8" LC_PAPER=en_US.UTF-8 LC_NAME=en_US.UTF-8 LC_ADDRESS=en_US.UTF-8 LC_TELEPHONE=en_US.UTF-8 LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=en_US.UTF-8 LC_ALL=
您可以看到,上面的输出包含所有四类区域设置环境变量。
在Ubuntu上,您可以在系统设置中以图形方式设置语言、语言和LC_*变量>;语言支持。
基于Systemd的Linux发行版(Debian 8+、Ubuntu 15.04+、Fedora、CentOS7+、Arch Linux)可以使用以下命令设置每个语言环境变量。
sudo localectl set-locale variable_name=value
例如,设置LANG=en_US。UTF-8。
sudo localectl set-locale LANG=en_US.UTF-8
区域设置更改可能需要重新登录或重新启动才能生效。
SSH区域设置环境变量错误
当您使用ssh连接到远程Linux服务器时,可能会看到以下与区域设置相关的错误。
Failed to set locale, defaulting to C
或
perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LC_TIME = "zh_CN.UTF-8", LC_MONETARY = "zh_CN.UTF-8", LC_ADDRESS = "zh_CN.UTF-8", LC_TELEPHONE = "zh_CN.UTF-8", LC_NAME = "zh_CN.UTF-8", LC_MEASUREMENT = "zh_CN.UTF-8", LC_IDENTIFICATION = "zh_CN.UTF-8", LC_NUMERIC = "zh_CN.UTF-8", LC_PAPER = "zh_CN.UTF-8", LANG = "en_US.UTF-8" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_MESSAGES to default locale: No such file or directory locale: Cannot set LC_ALL to default locale: No such file or directory
为什么会发生这种区域设置错误?这是因为您的SSH客户端将您的语言环境变量从本地计算机转发到远程Linux服务器,而该服务器没有生成所需的语言环境。
如果你不是以英语为母语的人,这种情况经常发生。通常情况下,您会在本地计算机上配置非英语语言,但大多数Linux服务器默认只生成C语言环境(又名POSIX语言环境)和英语语言环境。
现在,让我向您展示3种修复此错误的方法。
方法1:在服务器上生成区域设置
要修复此错误,可以在Linux服务器上生成所需的区域设置。首先打开/etc/locale。服务器上的gen文件。
sudo nano /etc/locale.gen
找到所需的区域设置并删除#符号以取消注释。例如,生成zh_CN。UTF-8语言环境,找到这行:
#zh_CN.UTF-8 UTF-8
移除并#签名。保存并关闭文件。然后运行以下命令生成它。
sudo locale-gen
locale gen读取/etc/locale。gen文件,以了解要生成的区域设置。还可以通过取消对该文件中多行的注释来生成多个区域设置。
方法2:拒绝客户端区域设置环境变量
您可以告诉SSH服务器拒绝客户端区域设置环境变量。在Linux服务器上打开SSH服务器配置文件。
sudo nano /etc/ssh/sshd_config
找到下面这行。
AcceptEnv LANG LC_*
换成
AcceptEnv no
保存并关闭文件。然后重启SSH守护进程。
sudo systemctl restart ssh
在RHEL、CentOS和Fedora上,你需要跑
sudo systemctl restart sshd
在Fedora/CentOS服务器上,则有多个与语言环境相关的SSH设置。
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
只需将它们全部注释掉,然后重新启动SSH守护进程。
方法3:禁用区域设置环境变量转发
我们还可以禁用SSH locale环境变量转发来修复此错误。在本地计算机上打开SSH客户端配置文件。
sudo nano /etc/ssh/ssh_config
找到这一行:
SendEnv LANG LC_*
在开头加一个#符号,将其注释掉。保存并关闭文件。
下一步
我希望本教程能帮助您解决SSH语言环境问题。您可能还想设置SSH密钥,以保护服务器免受暴力攻击。
- 在Ubuntu上设置无密码SSH登录的2个简单步骤
- 在CentOS上设置SSH公钥身份验证的2个简单步骤
欢迎提出问题或建议。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?