Среди прочего, я пытаюсь изменить свое имя хоста с помощью скрипта. В основном скрипт sed
использует значения ubuntu
из / etc / hostname
и / etc / hosts
.
Я пробовал это в прошлом на Ubuntu 16.04.4 и работала хорошо.
Теперь, 16.04.6 (или просто случайно), я получаю ошибки с тем же сценарием. Так же, как я изменяю имя хоста
, изменение файлов hosts
занимает много времени (вероятно, потому, что sudo
пытается достичь нового хоста, который еще не помещен в файл hosts
, но я не знал, что sudo
использует такую информацию), и я получаю сообщение об ошибке:
sudo: не удается разрешить хост xxxx
Иногда также sudo: невозможно разрешить хост ubuntu
. Следующие команды скрипта имеют те же проблемы или не работают.
Но, очевидно, невозможно изменить значения обоих файлов сразу
Почему это произошло? Это что-то новое в этой версии дистрибутива Linux? Я читал, что у других людей была такая же проблема, но со мной никогда не случалось, я всегда мог редактировать оба файла с помощью sudo без каких-либо других неудобств.
sudo
использует glibc libnss для определения имен хостов. Обычно (с 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
и если постоянный
равен да
, то удаление / var / cache / nscd / hosts
, а затем запуск nscd
должен работать.
/ etc / hostname
просматривается только во время загрузки и не имеет значения в этом случае.
Кстати, вы также должны установить имя хоста с помощью hostnamectl
и / или ] hostname
, которое информирует ядро и любые службы, которые запрашивают у ядра имя хоста, например, через системный вызов uname
о новом имени хоста. hostnamectl
также выполняет всевозможные другие настройки имени хоста, потому что systemd.
Из справочной страницы sudoers (5):
Спецификация пользователя определяет, какие команды пользователь может запускать (и как какой пользователь) на указанных хостах . По умолчанию команды запускаются от имени root, но это можно изменить для каждой команды.
Файл конфигурации Sudo (/ etc / sudoers) позволяет указать, какую команду (-ы) пользователь может запускать, как другой (-и) пользователь (-и) и на каком (-ых) компьютере (-ах) . Это полезно, если у вас много машин, так как вы можете развернуть один и тот же файл sudoers на разных машинах. Возможно, у вас есть строка, в которой имя хоста указано как ubuntu (прежнее имя хоста). Запустите команду visudo
, определите строку и отредактируйте ее, указав новое имя хоста.