У меня свежая установка Ubuntu 12.04. Когда я подключаюсь к своему удаленному серверу, я получаю такие ошибки:
~$ ssh example.com sudo aptitude upgrade
...
Traceback (most recent call last):
File "/usr/bin/apt-listchanges", line 33, in <module>
from ALChacks import *
File "/usr/share/apt-listchanges/ALChacks.py", line 32, in <module>
sys.stderr.write(_("Can't set locale; make sure $LC_* and $LANG are correct!\n"))
NameError: name '_' is not defined
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_TIME = "de_DE.UTF-8",
LC_MONETARY = "de_DE.UTF-8",
LC_ADDRESS = "de_DE.UTF-8",
LC_TELEPHONE = "de_DE.UTF-8",
LC_NAME = "de_DE.UTF-8",
LC_MEASUREMENT = "de_DE.UTF-8",
LC_IDENTIFICATION = "de_DE.UTF-8",
LC_NUMERIC = "de_DE.UTF-8",
LC_PAPER = "de_DE.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_ALL to default locale: No such file or directory
No packages will be installed, upgraded, or removed.
0 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B of archives. After unpacking 0 B will be used.
...
У меня нет этой проблемы, когда я подключаюсь из более старой установки Ubuntu. Это вывод из моей установки Ubuntu 12.04, LANG и LANGUAGE установлены
$ locale
LANG=de_DE.UTF-8
LANGUAGE=de_DE:en_GB:en
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC=de_DE.UTF-8
LC_TIME=de_DE.UTF-8
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY=de_DE.UTF-8
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER=de_DE.UTF-8
LC_NAME=de_DE.UTF-8
LC_ADDRESS=de_DE.UTF-8
LC_TELEPHONE=de_DE.UTF-8
LC_MEASUREMENT=de_DE.UTF-8
LC_IDENTIFICATION=de_DE.UTF-8
LC_ALL=
Кто-нибудь знает, что изменилось в Ubuntu, чтобы получить это сообщение об ошибке на удаленных серверах?
Ответы:
Это потому, что для вашей локали на вашем локальном компьютере задан немецкий язык, который SSH пересылает и пытается использовать на сервере, но на вашем сервере он не установлен.
У вас есть несколько вариантов:
Генерация локали . Сгенерируйте немецкую локаль на сервере с помощью
sudo locale-gen de
.Прекратите пересылку локали от клиента . Не пересылайте переменную среды локали с вашего локального компьютера на сервер. Вы можете закомментировать
SendEnv LANG LC_*
строку в локальном/etc/ssh/ssh_config
файле.Прекратите принимать локаль на сервере . Не принимайте переменную окружения локали с вашего локального компьютера на сервер. Вы можете закомментировать
AcceptEnv LANG LC_*
строку в удаленном/etc/ssh/sshd_config
файле.Установите языковой стандарт сервера на английский . Явно установите локаль на английский на сервере. Например, вы можете добавить следующие строки на ваш пульт
~/.bashrc
или~/.profile
файлы:Если у вас нет корневого доступа к серверу, вариант Остановить переадресацию с клиента может быть лучшим (и единственным) способом.
источник
~/.profile
разрешила мою проблему. Благодарю.LANG
чего-то еще? ..Это может происходить иногда на новых минимальных / альтернативных установках или в других ситуациях. Исправление довольно простое. Попробуйте выполнить следующее тестирование в следующем порядке, чтобы убедиться, что ситуация исправлена:
1. Переконфигурируйте локали
sudo dpkg-reconfigure locales
2. Переустановите языковой пакет локали
sudo apt-get --reinstall install language-pack-de
3. Вручную форсировать настройки локали (постоянные)
sudo update-locale LC_ALL=de_DE.UTF-8 LANG=de_DE.UTF-8
источник
Комментарий линии
SendEnv LANG LC_*
в/etc/ssh/ssh_config
, так это должно выглядеть так:источник
Проблема
По умолчанию команда клиента ssh пересылает переменные среды, связанные с языковым стандартом, на сервер SSH. Это указано
/etc/ssh/ssh_config
на стороне клиента:И по умолчанию сервер SSH принимает их (
/etc/ssh/sshd_config
на сервере):Таким образом, если в вашей оболочке есть переменные среды, связанные с локалью, они будут заполнены в сеансе SSH на стороне сервера.
К сожалению,
SendEnv
вариант является накопительным . По словамman 5 ssh_config
:что означает, что это не может быть отменено .
Решение
Иногда невозможно или неразумно изменить общесистемную конфигурацию, особенно на стороне сервера. Тем не менее, вы можете обойти это. И это побочный эффект
-F
опции в команде ssh. По словамman ssh
:По умолчанию используется файл конфигурации для каждого пользователя,
~/.ssh/config
если он присутствует. Но вы можете явно указать это в командной строке, чтобы обойти/etc/ssh/ssh_config
:Было бы удобнее, если вы сделаете псевдоним в
~/.bashrc
:Таким образом,
SendEnv
директивы по умолчанию в общесистемной конфигурации не эффективны, поэтому по умолчанию никакие переменные среды не отправляются на сервер SSH.источник
У меня была похожая проблема. Мое решение состояло в том, чтобы закомментировать
SendEnv
строки/etc/ssh/ssh_config
(поскольку они не могут быть переопределены) и добавить следующую запись в~/.ssh/config
:с
<somehost>
именем хоста, на который я не хотел отправлять переменные окружения.источник