Fehlermeldung "sudo: Host kann nicht aufgelöst werden (keine)"

737

Wenn ich laufe, sudobleibt das Terminal einige Sekunden lang hängen und gibt dann eine Fehlermeldung aus. Mein Terminal sieht so aus:

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

Was kann ich tun, um es zu lösen?

Kit Sunde
quelle
2
Bitte posten Sie den Inhalt von /etc/hostnameund /etc/hosts.
Ordnen Sie den
48
Ich empfehle, diese Frage nicht als zu lokalisiert zu schließen . Es gibt viele Benutzer, die fälschlicherweise glauben, sie hätten einen Namen in ihre hostsDatei eingegeben, aber stattdessen einen anderen Namen, zumal Computer in vielen Netzwerken ähnliche Namen haben. Diese Frage (und Antwort) würde erscheinen, wenn jemand mit diesem Problem sucht, und die Antwort würde ihn auffordern, nach solchen Unstimmigkeiten zu suchen, obwohl die genaue Rechtschreibfehler unterschiedlich wäre.
Eliah Kagan
9
Stellen Sie sicher, dass Sie hostnamedasselbe mit hosts. zB der Hostname ist ubuntu-pc und hosts ist ubuntu-pc muss gleich sein.
Muhammad Sholihin
1
Ich bin heute darauf gestoßen. Das Problem war, dass das, was ich in hostname hatte, nicht in / etc / hosts war. Also: $ hostname => 'mybox' $ grep 'mybox' / etc / hosts => 192.168.1.2 mybox.example.com. Ich musste 'mybox' nach meinem Domainnamen in / etc / hosts => 192.168.1.2 hinzufügen mybox.example.com mybox
Ray
3
Ich kann keine Antwort schreiben, da diese Frage geschützt ist und ich hier nicht genug Ansehen habe. In meinem Fall, ich löste das Problem , indem Netzwerk-Manager neu zu starten: sudo /etc/init.d/network-manager restart. Ich frage mich jedoch, warum in erster Linie sudoZeit damit verschwendet wird, auf netzwerkbezogene Dinge zu warten. Sollte nicht sudoohne Probleme funktionieren, wenn das Netzwerk nicht verfügbar ist?
bli

Antworten:

999

Zwei zu überprüfende Punkte (vorausgesetzt, Ihr Computer wird aufgerufen my-machine, können Sie dies entsprechend ändern):

  1. Dass die /etc/hostnameDatei nur den Namen des Rechners enthält.

  2. Das /etc/hostshat einen Eintrag für localhost. Es sollte ungefähr so ​​aussehen:

     127.0.0.1 localhost.localdomain localhost
     127.0.1.1 my-machine
    

Wenn eine dieser Dateien nicht korrekt ist (da Sie sudo nicht ausführen können), müssen Sie den Computer möglicherweise im Wiederherstellungsmodus neu starten und die Änderungen vornehmen. Starten Sie dann in Ihrer normalen Umgebung neu.

Jeremy Kerr
quelle
31
Der Hostname wird erst nach einem Neustart geändert. Wenn Sie es ändern möchten, ohne den Computer neu zu starten, führen Sie die obigen Schritte aus und führen Sie anschließend Folgendes aus: - "sudo hostname my-machine", um festzustellen, ob dies funktioniert hat. Führen Sie "sudo hostname" aus. Der Hostname Ihres Computers wird angezeigt. Diese Methode kann als temporäre Methode verwendet werden, um auch den Hostnamen zu ändern. Nach einem Neustart wird der Wert aus der Datei / etc / hostname verwendet.
Yashvit
2
Hinweis: Da Sie nicht mit sudo beginnen können, ist es schwierig, diese Dateien zu bearbeiten. Meine Lösung war ich irgendwie in der Lage zu sudo visudo war und ändern #%admin ALL=(ALL) ALLzu %admin ALL=NOPASSWD: ALL, dann einen Neustart, und sudo su -, bearbeiten Sie diese Dateien, Set / richtige Hostnamen, starten Sie wieder, und alles funktionierte.
Ian M
4
Ich verwende das Linux-Subsystem unter Windows und bin auf dieses Problem gestoßen. Nachdem Sie Ihrer Antwort gefolgt haben, wurde sie behoben.
AmarVashishth
2
Sie können auch hinzufügen müssen , ::1 localhostum /etc/hosts(dies ist die IPv6 - Version von 127.0.0.1, auch bekannt als die Loopback - Adresse)
Woodrow Barlow
11
Warum hat dein Beispiel 127.0.0.1 localhostaber 127.0.1.1 my-machine?
Adam
193

Bearbeiten Sie /etc/hosts Ihren neuen Hostnamen und hängen Sie ihn an die Zeile 127.0.0.1 an (oder erstellen Sie eine neue Zeile, wenn Sie dies vorziehen).

Meins sieht aus wie:

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

Ersetzen Sie penguinim obigen Beispiel durch Ihren neuen Hostnamen, wie in der /etc/hostnameDatei angegeben.

Lekensteyn
quelle
2
Wie kann er die Datei / etc / hosts bearbeiten, wenn er nicht sudo kann? Es sei denn, er hat einen Rood-Account mit einem Passwort erstellt (schlechte Idee)
Dennis
9
@Dennis Sie können immer noch ausführen, sudoauch wenn diese Meldung angezeigt wird. Im IIRC müssen Sie jedoch bei jedem Aufruf Ihr Passwort eingeben. Wenn dies nicht funktioniert, können Sie die Wiederherstellungskonsole neu starten und die Änderungen übernehmen. Ein Root-Account mit Passwort wird nicht empfohlen.
Lekensteyn,
68

Fügen Sie Ihren Hostnamen hinzu, /etc/hostsdamit er Ihnen gefällt:

echo $(hostname -I | cut -d\  -f1) $(hostname) | sudo tee -a /etc/hosts
Collin Anderson
quelle
2
Es ist clever, aber ich denke nicht, dass es eine gute Idee ist, so etwas zu automatisieren.
Mwfearnley
1
Dadurch wird der Hostname an die Hosts-Datei angehängt. Es gibt eine inhärente Annahme, dass sich zwischen dem Loopback-IP und der Zuordnung zu localhost und dem Dateiende nichts befindet, aber zwischen dieser Zeile und dem Dateiende befindet sich jetzt IPv6-Material was du willst. Ein verwandter Kommentar: Das Bearbeiten dieser oder anderer Dateien erfordert die Verwendung von sudo und es ist sudo, das wir reparieren wollen. Wir müssen noch in der Lage sein, sudo auszuführen. In diesem Fall kann sudo -h hostname verwendet werden, um zuerst die Berechtigungen für die Dateien zu ändern oder die Berechtigung zum Bearbeiten zu erhalten.
Shivesh Suman
1
dies scheitert, weil ich nicht "sudo tee .." kann, aber dies hat den Trick getan: echo $(hostname -I | cut -d\ -f1) $(hostname) | sudo -h 127.0.0.1 tee -a /etc/hosts
Ronny Elflein r11lein
31

Beachten Sie, dass dies eine Antwort auf diese Frage ist, die mit dieser Frage zusammengeführt wurde.

Ihr Hostname ( dave00-G31M-ES2L) ist in nicht vertreten /etc/hosts. Fügen Sie ein Lzu dieser Zeile hinzu:

127.0.1.1   dave00-G31M-ES2

So wird es:

127.0.1.1   dave00-G31M-ES2L

Öffnen Sie dazu eine Konsole (drücken Sie Ctrl+ Alt+ T) und geben Sie Folgendes ein:

sudo gedit /etc/hosts

Fügen Sie den Buchstaben Lwie erwähnt hinzu, speichern und beenden Sie ihn.

Thor
quelle
10
Merken! Verwenden Sie sudoedit(oder sudo -e). Verwenden Sie zum Angeben des bevorzugten Editors die EDITORUmgebungsvariable (z. B. export EDITOR=vim), wenn eine Offline-Kopie zum Bearbeiten erstellt und nach dem Bearbeiten bereinigt überschrieben wird.
Jan
2
Und da ist noch einer, der vorschlägt, sudowenn es keinen mehr gibt sudo. sudofunktioniert nicht, Sir. sudo: unable to resolve host ...
Green
@ Green: Nein sudo? Die Fehlermeldung, die Sie erwähnen, stammt aus dem sudoBefehl. Vielleicht hast du etwas anderes gemeint?
Thor
@ Green sudofunktioniert gut. Es kann einfach keinen Zustand speichern (dh wie Lekensteyn an anderer Stelle sagte, müssen Sie jedes Mal Ihr Passwort eingeben).
Wlerin
4
Wenn Sie dieses Problem bei W10's Bash haben und auf diese Frage von Google gekommen sind, ist dies die Antwort, die für mich funktioniert hat. Ich habe die 127.0.0.1 so geändert, dass sie wie "127.0.0.1 localhost DESKTOP-SLQK4CV" aussieht (indem ich "sudo vim / etc / hosts" ausgeführt habe) Schreiben Sie ": wq", um zu speichern und zu beenden, oder ": q!", um zu beenden, ohne zu speichern. In meinem Fall hat sudo funktioniert, sagte aber nur, dass keine Verbindung zu DESKTOP-SLQK4CV hergestellt werden kann.
Ave
16

Ich hatte dieses Problem, als ich Ubuntu auf einem VPS verwendete. Ich habe es gelöst, indem ich die Datei / etc / hosts bearbeitet habe.

Führen Sie diesen Befehl aus:

sudo nano /etc/hosts

und füge dann hinzu:

127.0.0.1   localhost.localdomain localhost
127.0.1.1   ubuntu

Ich hoffe das wird dein Problem lösen :)

PS: Denken Sie daran, Ihren Computer neu zu starten!

Luca D'Amico
quelle
1
Überprüfen Sie auch, ob Ihr Gerätename (in der Titelleiste des Terminals nach dem @ -Zeichen gedruckt) mit dem Namen in der zweiten Zeile der hostsDatei übereinstimmt ("ubuntu" in Lucas Beispiel). Die erste Zeile kann auch nur "localhost" sein.
Waldir Leoncio
2
Merken! Verwenden Sie sudoedit(oder sudo -e). Verwenden Sie zum Angeben des bevorzugten Editors die EDITORUmgebungsvariable (z. B. export EDITOR=vim), wenn eine Offline-Kopie zum Bearbeiten erstellt und nach dem Bearbeiten bereinigt überschrieben wird.
Jan
11

Ich hatte das gleiche Problem, obwohl der Hostname in meiner / etc / hostname-Datei und / etc / hosts-Datei übereinstimmte.

Mein Hostname war "staging_1". Es stellt sich heraus, dass Ihr Hostname keinen Unterstrich enthält. Deshalb habe ich diesen Fehler erhalten. Das Ändern des Unterstrichs in einen Bindestrich hat mein Problem behoben.

Chris.B
quelle
11

Rufen Sie in AWS Ihren virtuellen Computer auf und aktivieren Sie "DNS-Hostnamen".

Erick
quelle
2
Willkommen bei askubuntu! Können Sie das etwas näher erläutern? Es ist nicht ganz klar, was du meinst (zumindest für mich).
Elder Geek
2
Das war die Antwort, die mir geholfen hat. Amazon AWS hat sich geändert, seit ich es das letzte Mal angeschaut habe. VPCs verfügen über DNS-Optionen und müssen aktiviert sein, bevor eine DNS-Auflösung funktioniert.
Chris Moore
1
Die Option Enable DNS Hostnames (DNS-Hostnamen aktivieren) finden Sie (zum Beispiel) im Kontextmenü des Eintrags vpc
Matteo Scotuzzi,
Es gibt keineDNS Hostnames
Green
7

Das in der Frage angegebene Symptom kann stark mit diesem spezifischeren Problem korrelieren:

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

Es gibt verschiedene Möglichkeiten, dies zu beheben. Eine davon besteht darin, Ihren Hostnamen als localhost in hinzuzufügen /etc/hosts(wie in mehreren anderen Antworten gezeigt). Dies mag im Allgemeinen das Richtige sein, ist jedoch nicht die einzig mögliche Lösung.

Ein "vollqualifizierter Domänenname" wird möglicherweise von einem externen DNS-Server oder einem ähnlichen Server bereitgestellt (sofern dieser in Ihrem Netzwerk verfügbar ist). In diesem Fall sudowird sich trotz fehlendem Eintrag in nicht beschweren /etc/hosts.


Hinweis: Es wird sudoversucht, den Hostnamen zu dereferenzieren, obwohl dies aufgrund optionaler Funktionen in der sudoers-Datei nicht unbedingt erforderlich ist. Siehe sudo-Befehl, der versucht, nach dem Hostnamen zu suchen .

Solange die Verzögerung nicht zu lang ist, ist diese Fehlermeldung normalerweise harmlos.

kein Balken
quelle
Etwas schneller:sudo --host=localhost
Nobar
5

Ich bin auf dieselbe Fehlermeldung gestoßen. Ich halte diesen Diskussionsthread in den AWS-Entwicklerforen für eine bessere Lösung:

"Rufen Sie die VPC-Verwaltungskonsole auf, wählen Sie die VPC aus, klicken Sie auf" Aktionen ", wählen Sie" DNS-Hostnamen bearbeiten "und klicken Sie auf" Ja "."

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

user93581
quelle
5

Einige Terminalemulatoren aktualisieren die Eingabeaufforderung erst dann mit dem richtigen Hostnamen, wenn Sie den Emulator schließen und neu starten (lxterminal, ich spreche mit Ihnen).

Ich habe mit diesem Fehler 30min Kämpfe nach meinen Bearbeitung Hostnamen und Hosts - Dateien und läuft , sudo service hostname restartbis ich lief sudo hostnameund sah , dass der Hostname der neue Wert war, obwohl die prompt den alten Wert wurde showning.

Dolch
quelle
1
Das Problem sind nicht die Terminalemulatoren, sondern die Shells, die den Wert zwischengespeichert haben.
Mark Stosberg
4

In meinem Fall war es das Problem, ich habe das hostnameauf geändert , manweil ich wissen wollte, ob es einige Parameter gibt, die Sie verwenden können hostname. Stattdessen änderte sich meine Nachricht hostnamezu manund ich erhielt immer die gleiche Nachricht wie Sie

sudo: unable to resolve host (none)

Nachdem der Hostname wieder in "localhost" geändert wurde, funktionierte alles wieder einwandfrei

hostname localhost
XandruCea
quelle
3

Jeder rät zu modifizieren /etc/hosts. In einigen Fällen ist dies jedoch möglicherweise nicht möglich (z. B. in einem Docker-Container). Also musste ich einen besseren Weg finden und mir fiel folgendes ein:

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

Aliase funktionieren nicht in Bash-Skripten, aber wir können Variablen verwenden: sudo='sudo -h 127.0.0.1'

Dashohoxha
quelle
2

Tut mir leid, ich kann Ihnen nicht viel helfen, aber da "Host kann nicht aufgelöst werden" steht, versuchen Sie Folgendes:

hostname

Überprüfen Sie, ob es sich bei der Ausgabe um den Hostnamen des Computers handelt. Wenn nicht, liegt das Problem in der Host-Konfiguration, nicht in sudo.

animaletdesequia
quelle
Ich habe den Hostnamen meines Rechners bekommen. Ich habe auch einen Eintrag in / etc / hosts. Ich bekomme immer noch den Fehler.
Chandresh
Haben Sie den Computer nach dem Ändern der Hosts-Datei neu gestartet?
animaletdesequia
Nein. Mein IT-Team gab an, dass Probleme mit der Sperrdatei und dem GPG-Schlüssel mit Puppenlabors aufgetreten sind. Jetzt wurde es ohne Neustart behoben ..
chandresh
2

OP schrieb:

Es war alles in / etc / hostname. Auf zwei unserer kranken Server sah es so aus:

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

Auf einem Server ohne dieses Problem hatten wir:

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

Entfernte die linux-web-nPortion, startete neu und alles war in Ordnung.

Radu Rădeanu
quelle
2

Möglicherweise wird eine Fehlermeldung angezeigt, wenn Ihre Hosts oder Ihre Hostnamensdatei unzulässige Zeichen enthält. Es sind nur diese Symbole zulässig: az, AZ, 0-9

Marcello
quelle
2

Ich hatte das gleiche Problem! Ich habe den Namen meines VPS über das Online-Verwaltungsbedienfeld geändert, ohne den Computernamen in der Hosts-Datei zu ändern. Alles, was ich getan habe, war:

sudo nano /etc/hosts

Dann habe ich es so bearbeitet:

127.0.1.1 Megabyte Megabyte
127.0.0.1 localhost

Dazu:

127.0.1.1 Debian Debian
127.0.0.1 localhost

und das hat meinen Fehler behoben! Hoffe das hat geholfen!

Synth
quelle
1

Ich hatte das gleiche problem Ich habe das Problem gelöst, indem ich die Dateien / etc / hosts und / etc / hostname ... in der Datei / etc / hosts bearbeitet habe. Bearbeiten Sie einfach den oberen Teil wie unten gezeigt.

#vi /etc/hosts
    127.0.0.1   localhost
    127.0.1.1   localhost  myhostname




#vi /etc/hostname
    myhostname
Centy
quelle
127.0.1.1 localhost myhostnameoder 127.0.1.1 myhostname?
Mostafa Ahangarha
2
Wie kann man /etc/hostsohne bearbeiten sudo. sudofunktioniert nichtsudo: unable to resolve host ...
Grün
1

Wenn Sie sudo nicht können, können Sie sich als root über su anmelden. IE: su root (in einem x-Term). Geben Sie das root-Passwort ein, wenn Sie dazu aufgefordert werden. Anschließend können Sie die Dateien mit nano bearbeiten. Das root-Passwort in 'buntu ist dasselbe wie das Passwort, das Sie für sudo verwenden würden.

Ken scharf
quelle
5
Das root-Passwort in Ubuntu ist nicht dasselbe Passwort für sudo. rootist ein eigenes Konto, für das standardmäßig kein Kennwort festgelegt ist.
TheWanderer
1

Wenn Sie Vagrant verwenden, melden Sie sich beim Gast an und führen Sie es aus apt-get --no-install-recommends install virtualbox-guest-utils

Tanmoy
quelle
0

Wenn es sich bei Ihrem Problem um diese /etc/hostnameDatei handelt und /etc/hostsbeide Dateien Ihren gewünschten Hostnamen haben und der Fehler weiterhin auf Ihrem Computer angezeigt wird

sudo: unable to resolve host

Versuchen Sie, den Hostnamen zu erzwingen

sudo hostname -F /etc/hostname

Wahrscheinlich wird immer noch derselbe Fehler angezeigt, aber versuchen Sie, sich abzumelden und wieder anzumelden. Bei mir hat es funktioniert.

GypsyCosmonaut
quelle