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

Изменение имени хоста вызывает ошибку разрешения хоста sudo

Помимо прочего, я пытаюсь изменить свое имя хоста с помощью скрипта. В основном сценарий seds значения ubuntu из /etc/hostname и /etc/hosts.

Я пробовал это на Ubuntu 16.04.4 в прошлом и работал хорошо.

Теперь, 16.04.6 (или просто случайно), я получаю ошибки с тем же скриптом. Так же, как я меняю hostname, изменение hosts файлы занимает много времени (вероятно, потому что sudo пытается связаться с новым хостом, который еще не помещен в hosts файл, но я не знал sudo использует такую ​​информацию), и я получаю сообщение об ошибке:

sudo: unable to resolve host xxxx

Иногда также sudo: unable to resolve host ubuntu. Следующие команды скрипта имеют те же проблемы или не работают.

Но, очевидно, невозможно изменить сразу значения обоих файлов.

Почему это случилось? Что-то новенькое в этой версии дистрибутива Linux? Я читал, что у других людей была такая же проблема, но со мной никогда раньше не случалось, я всегда мог редактировать оба файла с помощью sudo без каких-либо других неудобств.

Из справочной страницы sudoers (5):

Спецификация пользователя определяет, какие команды пользователь может запускать (и как пользователь) на указанные хосты. По умолчанию команды запускаются от имени пользователя root, но это можно изменить для каждой команды.

Файл конфигурации Sudo (/ etc / sudoers) позволяет указать, какие команды может запускать пользователь, от имени другого пользователя (пользователей) и на какой машине (ах). Это полезно, если у вас много машин, так как вы можете развернуть один и тот же файл sudoers на разных машинах. Вероятно, у вас есть строка, в которой имя хоста указано как ubuntu (бывшее имя хоста). Запустить visudo укажите строку и отредактируйте ее, указав новое имя хоста.

sudo использует libnss в glibc для определения имен хостов. Обычно (с 16.04) nscd это работает. Возможно, вы столкнетесь с истечением срока его кеша. Соответствующая конфигурация в /etc/nscd.conf:

    enable-cache            hosts           yes
    positive-time-to-live   hosts           3600
    negative-time-to-live   hosts           20
    check-files             hosts           yes
    persistent              hosts           yes

check-files будет вызвано nscd чтобы «периодически проверять ... время модификации ... / etc / hosts».

Я игнорирую сложности, связанные с нестандартной конфигурацией в /etc/nsswitch.conf.

У вас должно быть как старое, так и новое имя хоста в /etc/hosts пока старый больше не кешируется. Остановка ncsd и если persistent является yes затем удаление /var/cache/nscd/hosts, а затем запустив nscd должно сработать.

/etc/hostname используется только во время загрузки и в данном случае не имеет значения.

Кстати, вы также должны установить имя хоста с помощью hostnamectl и / или hostname который информирует ядро ​​и любые службы, которые запрашивают у ядра имя хоста, например, через uname системный вызов нового имени хоста. hostnamectl выполняет всевозможные другие настройки имени хоста, потому что systemd.