Повідомлення про помилку "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, а хости ubuntu-pc повинні бути однаковими.
Мухаммад Шоліхін

1
Я сьогодні зіткнувся з цим. Проблема полягала в тому, що те, що я мав у імені хоста, не було в / 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робота недоступна, чи не має працювати без проблем?
блі

Відповіді:


999

Дві речі, які потрібно перевірити (якщо припустити, що ваша машина називається my-machine, ви можете змінити це за необхідності):

  1. Щоб /etc/hostnameфайл містив лише ім’я машини.

  2. Це /etc/hostsє запис для localhost. Він повинен мати щось на зразок:

     127.0.0.1 localhost.localdomain localhost
     127.0.1.1 мій автомат
    

Якщо будь-який з цих файлів невірний (оскільки ви не можете судо), можливо, вам доведеться перезавантажити машину у режим відновлення та внести зміни, а потім перезавантажитись у звичне середовище.


31
Ім'я хоста не зміниться, поки ви не перезавантажитесь. Якщо ви хочете змінити його без перезавантаження машини, виконайте наведені вище дії та після цього запустіть: - "sudo hostname my-machine", щоб побачити, чи спрацювало це, запустіть "sudo hostname", воно покаже ім'я хоста вашої машини. Цей метод, можливо, також використовується як тимчасовий метод, щоб змінити ім'я хоста. після перезавантаження використовується значення файлу / etc / hostname.
Яшвіт

2
Примітка: оскільки ви не можете почати судо, важко редагувати ці файли. Моє рішення було я яким - то чином зміг SUDO visudo і змінити #%admin ALL=(ALL) ALLдо %admin ALL=NOPASSWD: ALL, а потім виконати перезавантаження, і Sudo су -, редагувати ці файли, встановіть / правильне ім'я хоста, перезавантажитися знову, і все працювало.
Ян М

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файлі.


2
Як він може редагувати файл / etc / hosts, якщо він не може судо? Якщо тільки він не створив обліковий запис з паролем (погана ідея)
Денніс

9
@Dennis Ви все ще можете виконати, sudoнавіть якщо це повідомлення відображається. IIRC, вам все одно доведеться вводити свій пароль при кожному виклику. Якщо це не працює, ви можете перезавантажити консоль відновлення та застосувати зміни. Кореневий обліковий запис із паролем не рекомендується.
Лекенштейн

68

Додайте ім’я хоста /etc/hostsтак, щоб:

echo $(hostname -I | cut -d\  -f1) $(hostname) | sudo tee -a /etc/hosts

2
Це розумно, але я не думаю, що це може бути хорошою ідеєю автоматизувати щось подібне.
mwfearnley

1
Це додає ім'я хоста до файлу хостів. Є притаманне припущення, що між відображенням lopback ip відображенням до localhost та кінцем файлу немає нічого, але тепер між цим рядком та кінцем файлу є деякі речі IPv6, і в цьому випадку це рішення насправді не дає вам чого б ви хотіли. Пов’язаний коментар: Для редагування цього чи інших файлів потрібно використовувати sudo, і це ми намагаємося виправити. Нам все ще потрібно вміти керувати судо. У цьому випадку ім'я хоста sudo -h можна використовувати для першого зміни дозволів на файли або отримання висоти для їх редагування.
shivesh suman

1
це не вдається, тому що я не можу " 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), Оскільки він створює офлайн-копію для редагування, а потім чисто редагує після редагування.
січня

2
І тут є ще один, який підказує, sudoколи його більше немає sudo. sudoне працює, сер. sudo: unable to resolve host ...
Зелений

@Green: Ні sudo? Повідомлення про помилку, яке ви згадуєте, походить від sudoкоманди. Можливо, ви мали на увазі щось інше?
Тор

@Green sudoпрацює чудово. Він просто не може зберігати жоден стан (наприклад, як Лекенштейн казав, що ви повинні вводити свій пароль кожен раз).
Wlerin

4
Якщо у вас є проблема на Bash W10, і ви прийшли до цього питання з 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" на прикладі Лука). Перший рядок також може бути просто "localhost".
Вальдір Леонсіо

2
Пам'ятайте! Використовуйте sudoedit(або sudo -e). Щоб вказати бажаний редактор, використовуйте EDITORзмінну середовища (напр. export EDITOR=vim), Оскільки він створює офлайн-копію для редагування, а потім чисто редагує після редагування.
січня

11

У мене виникло те саме питання, хоча ім'я хоста у моєму файлі / etc / hostname та / etc / hosts файл збігався.

Моє ім’я хоста було "staging_1". Виявляється, ви не можете мати підкреслення у своєму імені хоста, через що я отримував цю помилку. Зміна підкреслення на дефіс вирішила мою проблему.


11

У AWS перейдіть до свого vpc та увімкніть "DNS-імена хостів".


2
Ласкаво просимо в askubuntu! Чи можете ви трохи розширити це? Не зовсім зрозуміло, що ти маєш на увазі (принаймні для мене) ..
Старійшина Гік

2
Це була відповідь, яка мені допомогла. Amazon AWS змінився з моменту, коли я останній раз переглядав це. VPC мають параметри DNS, і їх потрібно ввімкнути, перш ніж будь-яка роздільна здатність DNS запрацює.
Кріс Мур

1
параметр "Увімкнути імена хостів DNS" можна знайти (наприклад) у меню правої кнопки миші в
vpc

НемаєDNS Hostnames
Зелений

7

Симптом, наведений у питанні, може сильно співвідноситись із цією більш конкретною проблемою:

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

Існують різні способи вирішення цього питання, один із яких - додати ім'я хоста як localhost /etc/hosts(як показано в кількох інших відповідях). Це взагалі може бути правильним, але це не єдино можливе рішення.

"Повноцінне доменне ім'я" може надаватися зовнішнім сервером DNS або подібним (якщо таке доступне у вашій мережі). У цьому випадку sudoне буде скаржитися, незважаючи на пропущений запис у /etc/hosts.


Примітка: sudoспроби знеструмлювати ім'я хоста, навіть якщо це не обов'язково, через необов'язкові можливості у файлі sudoers. Дивіться команду sudo, яка намагається знайти ім'я хоста .

Поки затримка не надто довга, це повідомлення про помилку, як правило, нешкідливо.


Дещо швидше:sudo --host=localhost
nobar

Оновлення команди sudo, яка намагається знайти посилання на ім'я хоста
x-yuri

5

Я зіткнувся з цим самим повідомленням про помилку. Я думаю, що ця тема обговорення на Форумах розробників AWS є кращим рішенням:

"Перейдіть на консоль управління VPC, виберіть VPC, натисніть Дії, виберіть Редагувати імена хостів DNS та виберіть Так."

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


5

Деякі емулятори терміналів не оновлюватимуть запит на правильне ім'я хоста, поки ви не закриєте і не перезапустите емулятор (lxterminal, я з вами говорю).

Я провів 30 хвилин, бореться з цією помилкою після редагування мого імені хоста і файлів хостів, і працював, sudo service hostname restartпоки я не забіг sudo hostnameі не побачив, що ім'я хоста було новим значенням, навіть незважаючи на те, що в підказці було показано старе значення.


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

4

У моєму випадку це була проблема, я змінив hostnameна, manтому що хотів знати, чи є якісь параметри, якими можна користуватися hostname. Натомість це змінило мене hostnameна, manі я завжди отримував таке ж повідомлення, як і ти

sudo: unable to resolve host (none)

після зміни імені хоста назад на `localhost все знову працювало нормально

hostname localhost

3

Всі радить модифікувати /etc/hosts. Але в деяких випадках це може бути неможливим (наприклад, всередині докерного контейнера). Отже, мені довелося знайти кращий спосіб, і я придумав це:

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

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


2

Вибачте, я не можу вам допомогти багато, але, оскільки там написано "не вдається вирішити хост", спробуйте виконати:

hostname

І подивіться, чи є вихід ім'ям хоста машини. Якщо ні, проблема полягає в конфігурації хоста, а не sudo.


Я зробив це, що отримав ім'я хоста своєї машини. У мене також є запис у / etc / hosts. Я все ще отримую помилку.
chandresh

Ви перезавантажили машину після зміни файлу хостів?
animaletdesequia

Ні. Хоча моя ІТ-команда сказала, що виникла проблема із файлом блокування, а також gpg-ключем з ляльковими. Тепер це вирішено без перезавантаження ..
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


2

У мене була ця сама проблема! Я змінив ім'я свого VPS через панель управління в Інтернеті, яка не змінила ім'я машини у файлі хостів. Все, що я зробив:

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

і це виправило мою помилку! Сподіваюсь, це допомогло!


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

127.0.1.1 localhost myhostnameабо 127.0.1.1 myhostname?
Мостафа Ахангарха

2
Як можна редагувати /etc/hostsбез sudo. sudoне працюєsudo: unable to resolve host ...
Зелений

1

якщо ви не можете судо, МОЖЕТЕ увійти як root через su. IE: su root (в x-терміні). тоді при появі запиту введіть кореневий пароль, тоді ви можете редагувати файли за допомогою nano. Корінний пароль у 'buntu такий же, як пароль, який ви використовували б для sudo.


5
Корінний пароль в Ubuntu - це не той самий пароль sudo. root- це власний обліковий запис, у якому за замовчуванням не встановлено пароль.
TheWanderer

1

Якщо ви використовуєте Vagrant, тоді увійдіть до гостя та запустіть apt-get --no-install-recommends install virtualbox-guest-utils


0

Якщо ваша проблема полягає в тому, що /etc/hostnameфайл, і /etc/hostsобидва файли мають потрібне ім’я хоста, і все-таки ваша машина відображає помилку

sudo: unable to resolve host

Спробуйте, примушуючи ім'я хоста

sudo hostname -F /etc/hostname

Можливо, ви все одно отримаєте ту саму помилку, але спробуйте вийти з системи та увійти знову. Це працювало для мене.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.