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