修复SSH区域设置环境变量错误的3种方法

本文将向您展示3种解决SSH区域设置环境变量错误的方法。 什么是语言环境环境变量? 在Linux中,语言环境由四类环境变量组成:

  1. 语言
  2. LC_ALL
  3. LC _ *:LC_TYPE,LC_NUMERIC,LC_TIME…

这些环境变量定义Linux发行版上的系统语言,货币格式,日期和时间格式等。 您可以通过运行以下命令来检查您的区域设置环境变量 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上,您可以在以下位置以图形方式设置LANGUAGE,LANG和LC_ *变量 系统设置 > 语言支持

基于系统的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语言环境(aka 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区域设置环境变量转发来修复此错误。 打开本地计算机上的SSH客户端配置文件。

sudo nano /etc/ssh/ssh_config

找到这一行:

SendEnv LANG LC_*

在开头添加#号以将其注释掉。 保存并关闭文件。

随时欢迎提出问题或建议。 如果您发现此帖子有用,请🙂在社交媒体上与您的朋友分享! 请继续关注更多Linux教程。

Sidebar