Некоторые пользователи сталкиваются с ошибкой "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 влияет только на локальные правила.
А теперь вернёмся к нашей ошибке. Как я уже сказал, она означает, что утилита не может определить IP-адрес "имени хоста". Для домена сайта это означало бы, что такой записи нет в DNS. Но поскольку это имя нашего локального компьютера, то вполне естественно, что его нет в глобальной сети.
Как исправить ошибку
1. Решение проблемы в /etc/hosts
Чтобы исправить ошибку, мы можем добавить такую DNS-запись локально в файл /etc/hosts. Поскольку sudo у вас не работает, а этот файл можно редактировать только от суперпользователя, то эта простая задача становится сложнее. Сначала смотрим наше текущее имя хоста:
hostname
Дальше, если у вас установлен пароль root, вы можете авторизоваться от его имени с помощью su:
su -
А затем добавить такую строчку в /etc/hosts:
vi /etc/hosts
Слова "имя_хоста" надо заменить на то имя хоста, которое вы получили с помощью команды 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". Как видите, всё достаточно логично и просто. Если у вас остались вопросы, спрашивайте в комментариях!
Anubis – это максимально легкое open-source решение, созданное специально для защиты небольших веб-ресурсов от бесконечного потока запросов от ботов и AI парсеров. Этот инструмент можно считать "ядерным вариантом", потому что он заставляет ботов выполнять вычисления похожие на майнинг криптовалюты. Но это неплохая альтернатива для тех, кто не может или не хочет использовать Cloudflare. Посмотреть детали











Если что-то изменяете в файле /etc/hosts, то сеть перезапускать не нужно.
cat /etc/hostname
NewHostname
cat /etc/hosts
127.0.0.1 localhost NewHostname
::1 localhost NewHostname ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
И все.
спасибо за совет, нагнулся сервер после 1 пункта
Ничего не поняла. У меня такая ошибка в мяте случилась в приложении, как её исправить?
Разве `127.0.0.1 имя_хоста`
А не `127.0.1.1 имя_хоста`???
Вдруг, кому поможет.
В Astra Linux файла /etc/host нет. Вместо него нужно редактировать /etc/hosts (в конце имени файла s).