В данной статье мы обсудим три метода для устранения проблемы с переменной окружения локали SSH. Что представляет собой переменная окружения локали? В операционной системе Linux локаль включает в себя четыре категории переменных окружения:
- LANGUAGE
- LC_ALL
- LC_*: LC_ТИП, LC_ЧИСЛОВОЙ, LC_ВРЕМЯ…
- 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_* графически в настройках системы >поддержка языковых возможностей

Дистрибутивы 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 вы можете столкнуться с ошибкой, связанной с настройками локали.
Не удалось установить локаль, используется значение по умолчанию 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, где необходимая локаль не была создана.
Это часто случается, если вы не владеете английским языком. Обычно вы настраиваете язык, отличный от английского, на своем компьютере, однако на большинстве серверов 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-сервере.
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.
Ваши вопросы и предложения всегда будут рады услышать. Если этот пост оказался для вас полезным, не забудьте подписаться на нашу бесплатную рассылку, чтобы получать дополнительные советы и рекомендации.

