Назад | Перейти на главную страницу

Не удалось установить языковой стандарт: принудительно установить определенный языковой стандарт при подключении через ssh

В течение многих лет у меня была проблема с "Ошибка установки локалей". Теперь я понял проблему. На моем локальном компьютере для 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"

Я хочу настроить то, что локальный LC_TIME (или любая переменная локали) никогда не экспортируется. Я в порядке, просто использую значение, определенное на удаленном компьютере. Как мне это определить?

Самый простой способ предотвратить «экспорт» окружения - это перезаписать их на стороне сервера. Создать .bashrc файл (или соответствующий файл инициализации для вашей оболочки) и перезапишите переменные.

пример: минимальный .bashrc файл

unset LC_TIME

в качестве альтернативы установите для переменной какое-нибудь разумное значение:

export LC_TIME=en_US.UTF-8

если ты действительно Если вы хотите предотвратить отправку некоторых переменных среды, вам, скорее всего, понадобится root-доступ на клиенте и / или сервере.

На стороне клиента вы можете редактировать /etc/ssh/ssh_config и удалить или изменить SendEnv линия. В большинстве современных дистрибутивов это настроено для отправки переменных среды локали (LC_*). Как пользователь вы можете только добавлять в этот список, но не перезаписывать. Вот почему вы можете отключить эту опцию, только если у вас есть root-доступ к машине.

Как вариант, на стороне сервера вы можете редактировать /etc/ssh/sshd_config и удалить или изменить AcceptEnv линия. В большинстве современных дистрибутивов это настроено на принять переменные среды локали (LC_*).

Найдите объяснения для SendEnv на странице руководства для ssh_config и AcceptEnv на странице руководства для sshd_config.

Для полноты картины: есть еще PermitUserEnvironment в sshd_config. Как следует из названия, он позволяет пользователю настроить некоторые файлы, которые будут инициализировать некоторые переменные. Если PermitUserEnvironment вы можете позаботиться обо всем остальном как пользователь, но я никогда не сталкивался с системой с PermitUserEnvironment включен.