Три метода устранения ошибки переменной окружения локали в SSH

В данной статье мы обсудим три метода для устранения проблемы с переменной окружения локали SSH. Что представляет собой переменная окружения локали? В операционной системе Linux локаль включает в себя четыре категории переменных окружения:

  1. LANGUAGE
  2. LC_ALL
  3. LC_*: LC_ТИП, LC_ЧИСЛОВОЙ, LC_ВРЕМЯ…
  4. LANG

Эти переменные среды устанавливают язык системы, формат валюты, а также формат даты и времени в вашем дистрибутиве 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_* графически в настройках системы >поддержка языковых возможностей

переменная окружения locale

Дистрибутивы Linux, основанные на systemd (такие как Debian 8 и выше, Ubuntu 15.04 и выше, Fedora, CentOS 7 и выше, Arch Linux), позволяют устанавливать каждую переменную окружения локали с помощью следующей команды.

sudo localectl set-locale variable_name = value

К примеру, задайте значение LANG=en_US. UTF-8.

sudo localectl set-locale LANG=en_US. UTF-8

Изменение параметров локали может потребовать повторного входа в систему или перезагрузки, чтобы они вступили в силу.

Ошибка переменной окружения локали в SSH

При подключении к удалённому серверу Linux по SSH вы можете столкнуться с ошибкой, связанной с настройками локали.

Читайте также:  Что делать если появляется ошибка apt-get command not found в Linux

Не удалось установить локаль, используется значение по умолчанию C

perl: предупреждение: Установка локали не удалась. perl: предупреждение: Пожалуйста, проверьте, что ваши настройки локали: LANGUAGE = (не установлено), LC_ALL = (не установлено), 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" поддерживаются и установлены в вашей системе. perl: предупреждение: Переход на стандартную локаль ("C"). locale: Не удаётся установить LC_CTYPE для локали по умолчанию: Нет такого файла или директории locale: Не удаётся установить LC_MESSAGES для локали по умолчанию: Нет такого файла или директории locale: Не удаётся установить LC_ALL для локали по умолчанию: Нет такого файла или директории

Почему появляется ошибка локали? Это связано с тем, что ваш SSH-клиент передаёт переменные окружения локали с вашего локального устройства на удалённый сервер Linux, где необходимая локаль не была создана.

Читайте также:  Пошаговая инструкция по сжатию PDF в Linux

Это часто случается, если вы не владеете английским языком. Обычно вы настраиваете язык, отличный от английского, на своем компьютере, однако на большинстве серверов Linux по умолчанию установлена лишь локаль C (или локаль POSIX) и английские локали.

Теперь позвольте мне представить вам три метода для устранения этой ошибки.

Способ 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-сервер так, чтобы он не принимал переменные окружения локали от клиента. Для этого откройте конфигурационный файл SSH-сервера на вашем Linux-сервере.

Читайте также:  Дробные числа при делении в Linux

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_*

Поместите символ # в начале строки, чтобы она стала комментарием. Затем сохраните изменения и закройте файл.

Следующий этап

Надеюсь, что данный учебник оказался полезным для вас в решении проблемы с локализацией SSH. Также рекомендую настроить SSH-ключи для повышения безопасности вашего сервера и защиты от атак методом подбора паролей.

  • Два простых этапа для настройки SSH-входа на Ubuntu без использования пароля.
  • Два легких этапа для конфигурации аутентификации с помощью SSH-ключей на CentOS.

Ваши вопросы и предложения всегда будут рады услышать. Если этот пост оказался для вас полезным, не забудьте подписаться на нашу бесплатную рассылку, чтобы получать дополнительные советы и рекомендации.