Сообщение об ошибке «sudo: невозможно разрешить хост (нет)»

736

При запуске sudoтерминал зависает на несколько секунд, а затем выдает сообщение об ошибке. Мой терминал выглядит так:

ubuntu@(none):~$ sudo true
sudo: unable to resolve host (none)

Что я могу сделать, чтобы решить это?

Кит Сунде
источник
2
Пожалуйста, разместите содержимое /etc/hostnameи /etc/hosts.
организовать
48
Я рекомендую не закрывать этот вопрос как слишком локализованный . Многие пользователи могут ошибочно подумать, что они поместили одно имя в свой hostsфайл, но вместо этого добавили другое имя, тем более что во многих сетях компьютеры имеют одинаковые имена. Этот вопрос (и ответ) будет отображаться, когда кто-то ищет с этой проблемой, и ответ побудит их проверить наличие таких расхождений, даже если точное написание будет другим.
Элия ​​Каган
9
убедитесь, что вы hostnameтоже hosts. Например, имя хоста - ubuntu-pc, а hosts - ubuntu-pc, должно быть одинаковым.
Мухаммед Шолихин
1
Я столкнулся с этим сегодня. Проблема заключалась в том, что то, что у меня было в hostname, не было в / etc / hosts. То есть: $ hostname => 'mybox' $ grep 'mybox' / etc / hosts => 192.168.1.2 mybox.example.com. Мне нужно было добавить «mybox» после имени моего домена в / etc / hosts => 192.168.1.2 mybox.example.com mybox
Ray
3
Я не могу опубликовать ответ, потому что этот вопрос защищен и мне не хватает репутации здесь. В моем случае, я решил эту проблему путем перезагрузки сети-менеджер: sudo /etc/init.d/network-manager restart. Тем не менее, мне интересно, почему в первую очередь sudoтратится время на ожидание вещей, связанных с сетью. Не должно sudoработать без проблем, когда сеть недоступна?
ли

Ответы:

998

Необходимо проверить две вещи (при условии, что ваша машина называется my-machine, вы можете изменить это при необходимости):

  1. Этот /etc/hostnameфайл содержит только название машины.

  2. Это /etc/hostsимеет запись для localhost. Это должно иметь что-то вроде:

     127.0.0.1 localhost.localdomain localhost
     127.0.1.1 моя машина
    

Если какой-либо из этих файлов неправильный (поскольку вы не можете использовать sudo), вам, возможно, придется перезагрузить компьютер в режиме восстановления и внести изменения, а затем перезагрузить компьютер в обычной среде.

Джереми Керр
источник
31
Имя хоста не изменится до перезагрузки. Если вы хотите изменить его без перезагрузки компьютера, выполните описанные выше шаги и после этого запустите: - «sudo hostname my-machine», чтобы увидеть, сработало ли это, запустите «sudo hostname». Он покажет имя хоста вашей машины. Этот метод может также использоваться как временный метод для изменения имени хоста. после перезапуска используется значение из файла / etc / hostname.
Яшвит
2
Примечание: так как вы не можете начать с sudo, трудно редактировать эти файлы. Мое решение состояло в том, что я каким-то образом смог sudo visudo и изменился #%admin ALL=(ALL) ALLна %admin ALL=NOPASSWD: ALL, затем перезагрузился и sudo su -, отредактировал эти файлы, установил / исправил имя хоста, перезагрузил снова, и все работало.
Ян М
4
Я использую подсистему Linux в Windows, и я столкнулся с этой проблемой. После того, как ваш ответ, он был решен.
amarVashishth
2
Вы можете также необходимо добавить ::1 localhostк /etc/hosts(это версия IPv6 из 127.0.0.1, он же адрес петлевой)
Вудро Barlow
11
Почему ваш пример имеет, 127.0.0.1 localhostно 127.0.1.1 my-machine?
Адам
193

Отредактируйте /etc/hosts и добавьте ваше новое имя хоста в строку 127.0.0.1 (или создайте новую строку, если хотите).

Моя выглядит так:

127.0.0.1       localhost localhost.localdomain penguin

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

penguinВ приведенном выше примере замените его новым именем хоста, как указано в /etc/hostnameфайле.

Lekensteyn
источник
2
Как он может отредактировать файл / etc / hosts, если он не может sudo? Если только он не создал учетную запись rood с паролем (плохая идея)
Деннис
9
@Dennis Вы все еще можете выполнить, sudoдаже если это сообщение отображается. IIRC вам все равно придется вводить пароль при каждом вызове. Если это не работает, вы можете перезагрузиться в консоль восстановления и применить изменения. Учетная запись root с паролем не рекомендуется.
Лекенштейн
68

Добавьте ваше имя хоста /etc/hostsтак:

echo $(hostname -I | cut -d\  -f1) $(hostname) | sudo tee -a /etc/hosts
Коллин Андерсон
источник
2
Это умно, но я не думаю, что это хорошая идея, чтобы автоматизировать что-то вроде этого.
mwfearnley
1
Это добавляет имя хоста к файлу hosts. Существует внутреннее предположение, что между обратной связью ip, отображающей локальный хост и конец файла, нет ничего, но теперь между этой строкой и концом файла есть некоторый материал IPv6, и в этом случае это решение на самом деле не дает вам что бы вы хотели. Связанный комментарий: Редактирование этого или других файлов требует использования sudo, и sudo мы пытаемся исправить. Нам все еще нужно иметь возможность запускать sudo. В этом случае sudo -h hostname можно использовать для первого изменения прав доступа к файлам или для повышения прав на их редактирование.
Шивеш Суман
1
это терпит неудачу, потому что я не могу "sudo tee ..", но это echo $(hostname -I | cut -d\ -f1) $(hostname) | sudo -h 127.0.0.1 tee -a /etc/hosts
добилось цели
31

Обратите внимание, что это ответ на этот вопрос, который был объединен с этим.

Ваше имя хоста ( dave00-G31M-ES2L) не представлено в /etc/hosts. Добавьте Lк этой строке:

127.0.1.1   dave00-G31M-ES2

Так и становится:

127.0.1.1   dave00-G31M-ES2L

Для этого откройте консоль (нажмите Ctrl+ Alt+ T) и введите:

sudo gedit /etc/hosts

Добавьте письмо, Lкак указано, сохраните и выйдите.

Тор
источник
10
Помните! Используйте sudoedit(или sudo -e). Чтобы указать предпочитаемый редактор, используйте EDITORпеременную среды (например, export EDITOR=vim), поскольку она создает автономную копию для редактирования, а затем полностью перезаписывает после редактирования.
Jan
2
И здесь есть еще один, который предлагает, sudoкогда его больше нет sudo. sudoне работает, сэр. sudo: unable to resolve host ...
Зеленый,
@Green: нет sudo? Указанное вами сообщение об ошибке исходит от sudoкоманды. Возможно, вы имели в виду что-то другое?
Тор
@ Green sudoработает просто отлично. Он просто не может хранить никакое состояние (то есть, как сказал Лекенштейн в другом месте, вы должны каждый раз вводить свой пароль).
Wlerin
4
Если у вас есть эта проблема на Wash Wash и пришел на этот вопрос от Google, это ответ, который работал для меня. Я изменил 127.0.0.1, чтобы он выглядел как «127.0.0.1 localhost DESKTOP-SLQK4CV» (выполнив «sudo vim / etc / hosts» (быстрый совет новичкам vim: нажмите i, прежде чем вводить, чтобы перейти в режим вставки, нажмите esc, чтобы выйти что, напишите «: wq» для сохранения и выхода или «: q!» для выхода без сохранения), в моем случае sudo работал, но просто сказал, что не может подключиться к DESKTOP-SLQK4CV), и он начал работать для меня.
Ава
16

У меня была эта проблема, когда я использовал Ubuntu на VPS. Я решил это, отредактировав файл / etc / hosts.

запустите эту команду:

sudo nano /etc/hosts

и затем добавьте:

127.0.0.1   localhost.localdomain localhost
127.0.1.1   ubuntu

Я надеюсь, что это решит вашу проблему :)

PS: не забудьте перезагрузить компьютер!

Лука д'Амико
источник
1
Также проверьте, совпадает ли имя вашего устройства (напечатанное в строке заголовка терминала после знака @) с именем во второй строке hostsфайла («ubuntu» в примере с Luca). Первая строка также может быть просто "localhost".
Вальдир Леонсио
2
Помните! Используйте sudoedit(или sudo -e). Чтобы указать предпочитаемый редактор, используйте EDITORпеременную среды (например, export EDITOR=vim), поскольку она создает автономную копию для редактирования, а затем полностью перезаписывает после редактирования.
янв
11

У меня возникла та же проблема, хотя имя хоста в моем файле / etc / hostname и / etc / hosts совпадали.

Мое имя хоста было "staging_1". Оказывается, в имени вашего хоста не может быть подчеркивания, поэтому я и получил эту ошибку. Смена знака подчеркивания на дефис исправила мою проблему.

Chris.B
источник
11

В AWS перейдите на свой vpc и включите «DNS-имена хостов».

Erick
источник
2
Добро пожаловать в Askubuntu! Можете ли вы немного расширить это? Не совсем понятно, что вы имеете в виду (по крайней мере, для меня) ..
Старейшина Гик
2
Это был ответ, который помог мне. Amazon AWS изменился с тех пор, как я в последний раз смотрел его. VPC имеют опции DNS, и их необходимо включить, прежде чем любое разрешение DNS будет работать.
Крис Мур
1
опцию Включить DNS-имена хостов можно найти (например) в контекстном меню записи vpc
Matteo Scotuzzi
НетDNS Hostnames
Грин,
7

Симптом, приведенный в вопросе, может сильно коррелировать с этой более конкретной проблемой:

$ hostname --fqdn
hostname: Temporary failure in name resolution

Есть разные способы решения этой проблемы, один из которых заключается в добавлении имени вашего хоста в качестве локального хоста /etc/hosts(как показано в нескольких других ответах). В общем, это может быть правильным решением, но это не единственно возможное решение.

«Полное доменное имя» может быть предоставлено внешним DNS-сервером или аналогичным (если таковое имеется в вашей сети). В этом случае sudoне будем жаловаться, несмотря на пропущенную запись в /etc/hosts.


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

Пока задержка не слишком велика, это сообщение об ошибке, как правило, безвредно.

nobar
источник
Несколько быстрее:sudo --host=localhost
nobar
Upvote для команды sudo, пытающейся найти ссылку на имя хоста
x-yuri
5

Я столкнулся с тем же сообщением об ошибке. Я думаю, что эта дискуссионная ветка на форумах разработчиков AWS - лучшее решение:

«Перейдите в консоль управления VPC, выберите VPC, нажмите« Действия », выберите« Изменить имена хостов DNS »и выберите« Да ».»

https://forums.aws.amazon.com/thread.jspa?messageID=699718

user93581
источник
5

Некоторые эмуляторы терминала не будут обновлять приглашение с правильным именем хоста, пока вы не закроете и не перезапустите эмулятор (lxterminal, я говорю с вами).

Я потратил 30 минут на борьбу с этой ошибкой после того, как отредактировал свое имя хоста и файлы хостов и работал sudo service hostname restartдо тех пор, пока не запустился sudo hostnameи не увидел, что имя хоста было новым значением, даже если в приглашении было показано старое значение.

dagbel
источник
1
Проблема не в эмуляторах терминала, а в оболочках, которые кэшировали значение.
Марк Стосберг
4

В моем случае это была проблема, я изменил hostnameк , manпотому что я хотел бы знать , если есть некоторые параметры , которые можно использовать наhostname . Вместо этого он изменил мою hostnameTo manи я всегда получал такое же сообщение , как вы

sudo: unable to resolve host (none)

после изменения имени хоста обратно на `localhost все снова заработало нормально

hostname localhost
XandruCea
источник
3

Все советуют модифицировать /etc/hosts. Но в некоторых случаях это может быть невозможно (например, внутри контейнера докера). Итак, я должен был найти лучший способ, и я придумал это:

echo "alias sudo='sudo -h 127.0.0.1'" >> ~/.bash_aliases
source ~/.bashrc

Псевдонимы не работают в скриптах bash, но мы можем использовать переменные: sudo='sudo -h 127.0.0.1'

dashohoxha
источник
2

Извините, я не могу вам чем-то помочь, но, так как он говорит: «Не удается разрешить хост», попробуйте запустить:

hostname

И посмотрите, является ли вывод именем хоста машины. Если нет, то проблема в конфигурации хоста, а не в sudo.

animaletdesequia
источник
Я сделал, что получил имя хоста моей машины. У меня также есть запись в / etc / hosts. Я все еще получаю ошибку.
chandresh
Вы перезагрузили компьютер после изменения файла hosts?
animaletdesequia
Нет. Хотя моя ИТ-команда сказала, что есть проблема с файлом блокировки, а также ключом gpg с puppetlabs. Теперь, это было решено без перезапуска ..
Chandresh
2

ОП написал:

Все было в / etc / hostname. На двух наших больных серверах это выглядело так:

ubuntu@(none):~$ cat /etc/hostname
linux-web-n ip-10-128-##-##

Находясь на сервере без этой проблемы, мы имели:

ubuntu@ip-10-128-##-###:~$ cat /etc/hostname
ip-10-128-##-###

Убрал linux-web-nпорцию, перезагрузил и все было нормально.

Раду Рэдяну
источник
2

Возможно, вы получаете сообщение об ошибке, если ваш хост или файл имени хоста содержат недопустимые символы. Разрешены только эти символы: az, AZ, 0-9

Marcello
источник
2

У меня была такая же проблема! Я изменил имя своего VPS через онлайн панель управления администратора, которая не изменила имя машины в файле hosts. Все, что я сделал, было запущено:

sudo nano /etc/hosts

Затем я отредактировал это от этого:

127.0.1.1 Megabyte Megabyte
127.0.0.1 localhost

К этому:

127.0.1.1 Debian Debian
127.0.0.1 localhost

и это исправило мою ошибку! Надеюсь, это помогло!

Synth
источник
1

У меня такая же проблема. Я решил это, отредактировав файлы / etc / hosts и / etc / hostname ... в файле / etc / hosts, просто отредактировав верхнюю часть, как показано ниже.

#vi /etc/hosts
    127.0.0.1   localhost
    127.0.1.1   localhost  myhostname




#vi /etc/hostname
    myhostname
Centy
источник
127.0.1.1 localhost myhostnameили 127.0.1.1 myhostname?
Мостафа Ахангарха
2
Как вы можете редактировать /etc/hostsбез sudo. sudoне работаетsudo: unable to resolve host ...
Зеленый
1

если вы не можете sudo, вы можете войти в систему как root через su. IE: su root (в x-терме). затем при появлении запроса укажите пароль root, затем вы можете редактировать файлы с помощью nano. Пароль root в 'buntu такой же, как пароль, который вы бы использовали для sudo.

кен шарф
источник
5
Пароль пользователя root в Ubuntu не совпадает с паролем sudo. rootэто его собственная учетная запись, пароль которой не установлен по умолчанию.
Странник
1

Если вы используете Vagrant, войдите в гостевую систему и запустите apt-get --no-install-recommends install virtualbox-guest-utils

tanmoy
источник
0

Если ваша проблема заключается в том, что этот /etc/hostnameфайл и /etc/hostsоба файла имеют желаемое имя хоста, и все равно ваша машина показывает ошибку

sudo: unable to resolve host

Попробуй, форсируя имя хоста

sudo hostname -F /etc/hostname

Вы, вероятно, по-прежнему будете получать ту же ошибку, но попробуйте выйти и снова войти в систему. Это сработало для меня.

GypsyCosmonaut
источник