Komunikat o błędzie „sudo: nie można rozpoznać hosta (brak)”

737

Po uruchomieniu sudoterminal zacina się na kilka sekund, a następnie wyświetla komunikat o błędzie. Mój terminal wygląda następująco:

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

Co mogę zrobić, aby to rozwiązać?

Kit Sunde
źródło
2
Proszę zamieścić zawartość /etc/hostnamei /etc/hosts.
umów się
48
Odradzam zamykanie tego pytania jako zbyt zlokalizowanego . Jest wielu użytkowników, którzy mogą błędnie myśleć, że umieścili jedną nazwę w swoim hostspliku, ale zamiast tego pod inną, zwłaszcza że w wielu sieciach komputery mają podobną nazwę. To pytanie (i odpowiedź) pojawia się, gdy ktoś szuka tego problemu, a odpowiedź zachęca go do sprawdzenia takich rozbieżności, nawet jeśli dokładna pisownia byłaby inna.
Eliah Kagan,
9
upewnij się, że to hostnamesamo z hosts. np. nazwa hosta to ubuntu-pc, a hosty to ubuntu-pc muszą być takie same.
Muhammad Sholihin
1
Wpadłem na to dzisiaj. Problem polegał na tym, że to, co miałem w nazwie hosta, nie znajdowało się w / etc / hosts. To znaczy: $ hostname => 'mybox' $ grep 'mybox' / etc / hosts => 192.168.1.2 mybox.example.com. Musiałem dodać „mybox” po nazwie mojej domeny w / etc / hosts => 192.168.1.2 mybox.example.com mybox
Ray
3
Nie mogę opublikować odpowiedzi, ponieważ to pytanie jest chronione i nie mam tutaj wystarczającej reputacji. W moim przypadku, I rozwiązać problem poprzez ponowne uruchomienie network-manager: sudo /etc/init.d/network-manager restart. Zastanawiam się jednak, dlaczego przede wszystkim sudomarnuje się czas na czekanie na rzeczy związane z siecią. Czy nie powinno sudodziałać bez problemów, gdy sieć jest niedostępna?
bli

Odpowiedzi:

999

Dwie rzeczy do sprawdzenia (zakładając, że twoja maszyna jest wywoływana my-machine, możesz to odpowiednio zmienić):

  1. Że /etc/hostnameplik zawiera tylko nazwę urządzenia.

  2. To /etc/hostsma wpis dla localhost. Powinien mieć coś takiego:

     127.0.0.1 localhost.localdomain localhost
     127.0.1.1 moja maszyna
    

Jeśli któryś z tych plików nie jest poprawny (ponieważ nie można sudo), może być konieczne ponowne uruchomienie komputera w trybie odzyskiwania i wprowadzenie modyfikacji, a następnie ponowne uruchomienie w zwykłym środowisku.

Jeremy Kerr
źródło
31
Nazwa hosta nie zmieni się do momentu ponownego uruchomienia. Jeśli chcesz to zmienić bez ponownego uruchamiania komputera, wykonaj powyższe kroki i po tym uruchomieniu: - „sudo hostname my-machine”, aby sprawdzić, czy zadziałało, uruchom „sudo hostname”. Wyświetli nazwę hosta komputera. Ta metoda może być również używana jako tymczasowa metoda zmiany nazwy hosta. po ponownym uruchomieniu używana jest wartość z pliku / etc / hostname.
Yashvit,
2
Uwaga: ponieważ na początku nie można sudo, edycja tych plików jest trudna. Moje rozwiązanie polegało na tym, że w jakiś sposób mogłem sudo visudo i zmienić #%admin ALL=(ALL) ALLna %admin ALL=NOPASSWD: ALL, a następnie ponownie uruchomić i sudo su - edytować te pliki, ustawić / poprawić nazwę hosta, ponownie uruchomić komputer i wszystko działało.
Ian M
4
Używam podsystemu Linux w systemie Windows i napotkałem ten problem. Po wykonaniu odpowiedzi zostało rozwiązane.
amarVashishth
2
można również dodać ::1 localhostdo /etc/hosts(jest to wersja IPv6 127.0.0.1, alias adresu loopback)
Woodrow Barlow
11
Dlaczego twój przykład ma, 127.0.0.1 localhostale 127.0.1.1 my-machine?
Adam
193

Edytuj /etc/hosts i dołącz nową nazwę hosta do linii 127.0.0.1 (lub utwórz nową linię, jeśli wolisz).

Mój wygląda jak:

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

Zastąp penguinw powyższym przykładzie swoją nową nazwą hosta, jak podano w /etc/hostnamepliku.

Lekensteyn
źródło
2
Jak może edytować plik / etc / hosts, jeśli nie może sudo? Chyba że stworzył konto Rood z hasłem (zły pomysł)
Dennis
9
@ Dennis Nadal można wykonać, sudonawet jeśli ten komunikat jest wyświetlany. IIRC nadal musisz podać hasło przy każdym wywołaniu. Jeśli to nie zadziała, możesz ponownie uruchomić komputer w konsoli odzyskiwania i zastosować zmiany. Konto root z hasłem jest odradzane.
Lekensteyn
68

Dodaj swoją nazwę hosta, aby /etc/hostspolubić:

echo $(hostname -I | cut -d\  -f1) $(hostname) | sudo tee -a /etc/hosts
Collin Anderson
źródło
2
Jest sprytny, ale nie sądzę, że dobrym pomysłem jest automatyzacja czegoś takiego.
mwfearnley
1
Spowoduje to dodanie nazwy hosta do pliku hosts. Istnieje nieodłączne założenie, że nie ma nic pomiędzy sprzężeniem zwrotnym ip mapowania do localhost a końcem pliku, ale teraz jest trochę rzeczy IPv6 między tą linią a końcem pliku, w takim przypadku to rozwiązanie tak naprawdę nie daje ci czego byś chciał Powiązany komentarz: Edycja tego lub innych plików wymaga użycia sudo i to właśnie sudo próbujemy naprawić. Nadal musimy być w stanie uruchomić sudo. W takim przypadku sudo -h nazwa hosta może być używana do pierwszej zmiany uprawnień do plików lub uzyskania uprawnień do ich edycji.
shivesh suman
1
to się nie udaje, ponieważ nie mogę „sudo tee ..”, ale to echo $(hostname -I | cut -d\ -f1) $(hostname) | sudo -h 127.0.0.1 tee -a /etc/hosts
załatwiło sprawę
31

Uwaga: jest to odpowiedź na to pytanie, które zostało połączone z tym pytaniem .

Twoja dave00-G31M-ES2Lnazwa hosta ( ) nie jest reprezentowana w /etc/hosts. Dodaj Ldo tego wiersza:

127.0.1.1   dave00-G31M-ES2

Więc staje się:

127.0.1.1   dave00-G31M-ES2L

Aby to zrobić, otwórz konsolę (naciśnij Ctrl+ Alt+ T) i wpisz:

sudo gedit /etc/hosts

Dodaj list, Ljak wspomniano, zapisz i wyjdź.

Thor
źródło
10
Zapamiętaj! Użyj sudoedit(lub sudo -e). Aby określić preferowanego edytora, użyj EDITORzmiennej środowiskowej (np. export EDITOR=vim), Ponieważ tworzy ona kopię offline do edycji, a następnie po edycji zastępuje.
Jan
2
Jest jeszcze jeden, który sugeruje, sudokiedy już go nie ma sudo. sudonie działa, proszę pana. sudo: unable to resolve host ...
Zielony
@Zielony: Nie sudo? Wspomniany komunikat o błędzie pochodzi z sudopolecenia. Może miałeś na myśli coś innego?
Thor
@Green sudodziała dobrze. Po prostu nie może przechowywać żadnego stanu (tj. Jak powiedział Lekensteyn w innym miejscu, za każdym razem musisz wprowadzić hasło).
Wlerin
4
Jeśli masz ten problem na Bash W10 i przyszedłeś na to pytanie z Google, to jest odpowiedź, która zadziałała dla mnie. Zmieniłem 127.0.0.1, aby wyglądać jak „127.0.0.1 localhost DESKTOP-SLQK4CV” (wykonując „sudo vim / etc / hosts” (szybka wskazówka dla początkujących vimów: naciśnij i przed pisaniem, aby przejść do trybu wstawiania, naciśnij esc, aby wyjść napisz „: wq”, aby zapisać i wyjść lub „: q!”, aby wyjść bez zapisywania), w moim przypadku sudo działało, ale po prostu powiedziało, że nie może się połączyć z DESKTOP-SLQK4CV) i zaczęło działać dla mnie.
Ave
16

Miałem ten problem, gdy korzystałem z Ubuntu na VPS. Rozwiązałem go, edytując plik / etc / hosts.

uruchom to polecenie:

sudo nano /etc/hosts

a następnie dodaj:

127.0.0.1   localhost.localdomain localhost
127.0.1.1   ubuntu

Mam nadzieję, że to rozwiąże Twój problem :)

PS: Pamiętaj, aby ponownie uruchomić komputer!

Luca D'Amico
źródło
1
Sprawdź także, czy nazwa twojego urządzenia (wydrukowana na pasku tytułu terminala po znaku @) odpowiada nazwie w drugim wierszu hostspliku („ubuntu” w przykładzie Lucy). Pierwszy wiersz może być również „localhost”.
Waldir Leoncio
2
Zapamiętaj! Użyj sudoedit(lub sudo -e). Aby określić preferowanego edytora, użyj EDITORzmiennej środowiskowej (np. export EDITOR=vim), Ponieważ tworzy ona kopię offline do edycji, a następnie po edycji zastępuje.
Jan
11

Miałem ten sam problem, mimo że nazwa hosta w moim pliku / etc / hostname i pliku / etc / hosts były zgodne.

Moja nazwa hosta to „staging_1”. Okazuje się, że nazwa hosta nie może zawierać podkreślenia, dlatego otrzymywałem ten błąd. Zmiana znaku podkreślenia na myślnik naprawiła mój problem.

Chris.B
źródło
11

W AWS przejdź do swojego vpc i włącz „Nazwy hostów DNS”.

Erick
źródło
2
Witamy w askubuntu! Czy możesz to trochę rozwinąć? Nie jest do końca jasne, co masz na myśli (przynajmniej dla mnie) ..
Starszy Geek
2
To była odpowiedź, która mi pomogła. Amazon AWS zmienił się od czasu, gdy ostatni raz na to patrzyłem. VPC mają opcje DNS i muszą być włączone, zanim jakiekolwiek rozpoznawanie DNS będzie działać.
Chris Moore
1
opcję Włącz nazwy hostów DNS można znaleźć (na przykład) w menu prawym przyciskiem myszy wpisu
vpc
Nie maDNS Hostnames
Green
7

Objaw podany w pytaniu może silnie korelować z tym bardziej szczegółowym problemem:

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

Istnieją różne sposoby rozwiązania tego problemu, jednym z nich jest dodanie nazwy hosta jako localhost w /etc/hosts(jak pokazano w kilku innych odpowiedziach). To może być ogólnie właściwe, ale nie jest to jedyna możliwa rozdzielczość.

„W pełni kwalifikowana nazwa domeny” może być dostarczana przez zewnętrzny serwer DNS lub podobny (jeśli taki jest dostępny w Twojej sieci). W takim przypadku sudonie będzie narzekać, pomimo brakującego wpisu w /etc/hosts.


Uwaga: sudopróbuje wyrejestrować nazwę hosta, nawet jeśli nie jest to konieczne, ze względu na opcjonalne możliwości w pliku sudoers. Zobacz polecenie sudo próbujące wyszukać nazwę hosta .

Dopóki opóźnienie nie jest zbyt długie, ten komunikat o błędzie jest zwykle nieszkodliwy.

nobar
źródło
Nieco szybciej:sudo --host=localhost
nobar
5

Napotkałem ten sam komunikat o błędzie. Myślę, że ten wątek dyskusyjny na forach programistów AWS jest lepszym rozwiązaniem:

„Przejdź do konsoli zarządzania VPC, wybierz VPC, kliknij Działania, wybierz Edytuj nazwy hostów DNS i wybierz Tak”.

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

użytkownik93581
źródło
5

Niektóre emulatory terminali nie aktualizują monitu o poprawną nazwę hosta, dopóki nie zamkniesz i nie uruchomisz ponownie emulatora (lxterminal, mówię do ciebie).

Spędziłem 30 minut walcząc z tym błędem po edycji mojej nazwy hosta i plików hostów i działając, sudo service hostname restartdopóki nie uruchomiłem się sudo hostnamei nie zobaczyłem, że nazwa hosta jest nową wartością, nawet jeśli monit wyświetlał starą wartość.

dagbel
źródło
1
Problemem nie są emulatory terminali, lecz powłoki, które zbuforowały wartość.
Mark Stosberg
4

W moim przypadku to był problem, zmieniłem hostnamesię man, bo chciałem wiedzieć, czy istnieją pewne parametry można wykorzystać na hostname. Zamiast tego zmieniłem moje hostnamena mani zawsze otrzymałem taką samą wiadomość jak ty

sudo: unable to resolve host (none)

po zmianie nazwy hosta z powrotem na `localhost wszystko znów działało dobrze

hostname localhost
XandruCea
źródło
3

Każdy zaleca modyfikację /etc/hosts. Ale w niektórych przypadkach może to nie być możliwe (na przykład w kontenerze dokera). Musiałem więc znaleźć lepszy sposób i wymyśliłem:

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

Aliasy nie działają w skryptach bash, ale możemy używać zmiennych: sudo='sudo -h 127.0.0.1'

dashohoxha
źródło
2

Przykro mi, ale nie mogę ci dużo pomóc, ale ponieważ napisano „nie można rozwiązać hosta”, spróbuj uruchomić:

hostname

I sprawdź, czy dane wyjściowe to nazwa hosta komputera. Jeśli nie, problemem jest konfiguracja hosta, a nie sudo.

Animaletdesequia
źródło
Zrobiłem to, że mam nazwę hosta mojej maszyny. Mam również wpis w / etc / hosts. Nadal pojawia się błąd.
chandresh
Czy zrestartowałeś komputer po zmianie pliku hosts?
animaletdesequia
Nie. Chociaż mój zespół IT powiedział, że wystąpił problem z plikiem blokady, a także kluczem gpg z puppetlabs. Teraz problem został rozwiązany bez ponownego uruchomienia ..
Chandresh
2

OP napisał:

Wszystko było w / etc / hostname. Na dwóch naszych chorych serwerach wyglądało to tak:

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

Na serwerze bez tego problemu mieliśmy:

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

Usunąłem linux-web-nczęść, uruchomiłem ponownie i wszystko było w porządku.

Radu Rădeanu
źródło
2

może pojawić się błąd, jeśli hosty lub plik nazwy hosta zawierają niedozwolone znaki. Dozwolone są tylko te symbole: az, AZ, 0-9

Marcello
źródło
2

Miałem ten sam problem! Zmieniłem nazwę mojego VPS za pomocą panelu administracyjnego online, który nie zmienił nazwy komputera w pliku hosts Wszystko, co zrobiłem, to uruchomiłem:

sudo nano /etc/hosts

Następnie zedytowałem to z tego:

127.0.1.1 Megabyte Megabyte
127.0.0.1 localhost

Do tego:

127.0.1.1 Debian Debian
127.0.0.1 localhost

i to naprawiło mój błąd! Mam nadzieję, że to pomogło!

Syntezator
źródło
1

Miałem ten sam problem. Rozwiązałem go, edytując pliki / etc / hosts i / etc / hostname ... w pliku / etc / hosts, po prostu edytuj górną część, jak pokazano poniżej.

#vi /etc/hosts
    127.0.0.1   localhost
    127.0.1.1   localhost  myhostname




#vi /etc/hostname
    myhostname
Centy
źródło
127.0.1.1 localhost myhostnameczy 127.0.1.1 myhostname?
Mostafa Ahangarha
2
Jak możesz edytować /etc/hostsbez sudo. sudonie działasudo: unable to resolve host ...
Green
1

jeśli nie możesz sudo, możesz zalogować się jako root przez su. IE: su root (x-term). następnie podaj hasło roota, gdy pojawi się monit, a następnie możesz edytować pliki za pomocą nano. Hasło roota w 'buntu' jest takie samo jak hasło, którego używałbyś do sudo.

Ken Scharf
źródło
5
Hasło roota w Ubuntu nie jest tym samym hasłem dla sudo. rootto własne konto, które nie ma domyślnie ustawionego hasła.
TheWanderer
1

Jeśli używasz Vagrant, zaloguj się do gościa i uruchom apt-get --no-install-recommends install virtualbox-guest-utils

tanmoy
źródło
0

Jeśli problem dotyczy tego /etc/hostnamepliku /etc/hosts, oba pliki mają żądaną nazwę hosta, a mimo to Twój komputer wyświetla błąd

sudo: unable to resolve host

Spróbuj wymusić nazwę hosta

sudo hostname -F /etc/hostname

Prawdopodobnie nadal będzie występować ten sam błąd, ale spróbuj się wylogować i zalogować ponownie. To zadziałało dla mnie.

Cygański kosmonauta
źródło