Ошибка sudo unable to resolve host

Некоторые пользователи сталкиваются с ошибкой sudo unable to resolve host. Обычно, эта ошибка появляется после смены имени компьютера. Это простая проблема, которую можно просто решить.

В этой статье мы рассмотрим почему возникает эта ошибка, что она означает, а также как ее решить на примере Ubuntu.

Что значит sudo unable to resolve host

Сообщение unable to resolve host имя_хоста означает что утилита не может определить ip адрес хоста «имя_хоста». Казалось бы, sudo — это локальная команда для повышения привилегий в системе и ей незачем определять ip хостов. Но это не совсем так, sudo может использоваться и удаленными пользователями, например, подключенными по SSH, а в самом конфигурационном файле /etc/sudoers уровни доступа различных пользователей настраиваются такой строчкой:

пользователь хост=(другой_пользователь:группа) команды 

Подробнее про строку настройки читайте в статье настройка sudo в linux. А сейчас нам интересно что для каждого запроса утилите нужно определить какой хост используется на данном компьютере.

Если кратко, то основная идея разработчиков состоит в том, что один универсальный файл /etc/sudoers будет использоваться на множестве компьютере и на каждом из компьютеров нужно определить какие правила предназначены для него. Таким образом, переменная host в sudoers влияет только на локальные правила.

А теперь вернемся к нашей ошибке. Как я уже сказал она означает что утилита не может разрешить имя хоста. Для домена сайта это означало бы что такой записи нет в DNS. Но поскольку это имя нашего локального компьютера, то вполне естественно, что его нет в глобальной сети.

Как исправить ошибку

1. Решение проблемы в /etc/hosts

Чтобы исправить ошибку мы можем добавить такую DNS запись локально в файл /etc/hosts. Поскольку sudo у вас не работает, а этот файл можно редактировать только от суперпользователя, то эта простая задача становится сложнее. Сначала смотрим наше текущее имя хоста:

hostname

Дальше, если у вас установлен пароль root, вы можете авторизоваться от его имени с помощью su:

su -

А затем добавить такую строчку в /etc/hosts:

vi /etc/hosts

127.0.0.1 имя_хоста

Слова имя_хоста надо заменить на то имя хоста, которое вы получили с помощью команды hostname. После этого надо перезапустить компьютер или просто перезапустить сеть:

sudo systemctl restart networking

Еще желательно убедиться, что в системной службе разрешения доменных имен включено использование файла /hosts. Откройте /etc/nsswitch.conf и найдите в строке hosts слово files. Оно должно быть на первом месте. Если нет, перенесите его на первое место.

Если же у вас пароль для root не установлен, вам нужно загрузиться с LiveCD диска, примонтировать корневую файловую систему в /mnt/ и исправлять ошибку уже там.

2. Решение с помощью systemd

Также есть еще один путь. В попытках воспроизвести эту проблему в своей Ubuntu 18.04 я обнаружил что разрешением доменных имен для локальных приложений занимается служба systemd-resolved. Если она запущена, то даже если в файле /etc/hosts нет имени вашего компьютера все будет работать. Поэтому если вы случайно отключили эту службу, верните ее на место и все заработает:

sudo systemctl start systemd-resolved
sudo systemctl enable systemd-resolved

Выводы

В этой статье мы разобрали как справиться с ошибкой sudo cannot to resolve host. Как видите, все достаточно логично и просто. Если у вас остались вопросы, спрашивайте в комментариях!

Ответить

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: