Message d'erreur «sudo: impossible de résoudre l'hôte (aucun)»

736

Lorsque je lance sudole terminal, celui-ci est bloqué pendant quelques secondes, puis envoie un message d'erreur. Mon terminal ressemble à ceci:

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

Que puis-je faire pour le résoudre?

Kit Sunde
la source
2
S'il vous plaît poster le contenu de /etc/hostnameet /etc/hosts.
organiser
48
Je recommande de ne pas fermer cette question car elle est trop localisée . De nombreux utilisateurs peuvent penser, à tort, qu'ils ont mis un nom dans leur hostsfichier, mais un nom différent, en particulier parce que, sur de nombreux réseaux, les ordinateurs portent le même nom. Cette question (et cette réponse) apparaîtrait lorsque quelqu'un cherchait ce problème et la réponse l'inciterait à vérifier ces divergences, même si l'orthographe exacte était différente.
Eliah Kagan
9
assurez-vous de votre hostnamemême avec hosts. Par exemple, le nom d'hôte est ubuntu-pc et les hôtes, ubuntu-pc doivent être identiques.
Muhammad Sholihin
1
J'ai couru dans cette aujourd'hui. Le problème était que ce que j'avais dans hostname n'était pas dans / etc / hosts. À savoir: $ hostname => 'mybox' $ grep 'mybox' / etc / hosts => 192.168.1.2 mybox.example.com. J'avais besoin d'ajouter 'mybox' après mon nom de domaine dans / etc / hosts => 192.168.1.2 mybox.example.com mybox
Ray
3
Je ne peux pas poster de réponse car cette question est protégée et je n'ai pas assez de réputation ici. Dans mon cas, je résolu le problème en redémarrant-gestionnaire de réseau: sudo /etc/init.d/network-manager restart. Cependant, je me demande pourquoi, au départ, on sudoperd du temps à attendre des choses liées au réseau. Ne devrait pas sudotravailler sans problèmes quand le réseau n'est pas disponible?
bli

Réponses:

998

Deux choses à vérifier (en supposant que votre machine soit appelée my-machine, vous pouvez la changer si nécessaire):

  1. Que le /etc/hostnamefichier ne contient que le nom de la machine.

  2. Cela /etc/hostsa une entrée pour localhost. Il devrait avoir quelque chose comme:

     127.0.0.1 localhost.localdomain localhost
     127.0.1.1 ma-machine
    

Si l’un ou l’autre de ces fichiers n’est pas correct (car vous ne pouvez pas utiliser sudo), vous devrez peut-être redémarrer la machine en mode de récupération et y apporter les modifications, puis redémarrer dans votre environnement habituel.

Jeremy Kerr
la source
31
Le nom d'hôte ne changera pas jusqu'à ce que vous redémarriez. Si vous souhaitez le changer sans redémarrer la machine, suivez les étapes ci-dessus et exécutez ensuite: - "sudo hostname my-machine" pour voir si cela a fonctionné, exécutez "sudo hostname". Le nom d'hôte de votre machine s'affiche. Cette méthode peut également être utilisée comme méthode temporaire pour modifier le nom d'hôte. après un redémarrage, la valeur du fichier / etc / hostname est utilisée.
Yashvit
2
Remarque: comme vous ne pouvez pas commencer par sudo, il est difficile d’éditer ces fichiers. Ma solution est que j'étais en quelque sorte pouvoir visudo et changer sudo #%admin ALL=(ALL) ALLpour %admin ALL=NOPASSWD: ALL, puis redémarrer, et sudo su -, modifier ces fichiers, définir / nom d' hôte correct, redémarrer à nouveau, et tout fonctionnait.
Ian M
4
J'utilise le sous-système Linux sous Windows et j'ai rencontré ce problème. Après avoir suivi votre réponse, cela a été résolu.
amarVashishth
2
il se peut que vous deviez également ajouter quelque chose ::1 localhostà /etc/hosts(il s'agit de la version IPv6 de 127.0.0.1, aussi appelée l'adresse de bouclage)
Woodrow Barlow le
11
Pourquoi votre exemple a 127.0.0.1 localhostmais 127.0.1.1 my-machine?
Adam
193

Modifiez /etc/hosts et ajoutez votre nouveau nom d’hôte à la ligne 127.0.0.1 (ou créez-en une nouvelle si vous préférez).

Le mien ressemble à:

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

Remplacez penguindans l'exemple ci-dessus par votre nouveau nom d'hôte, comme indiqué dans le /etc/hostnamefichier.

Lekensteyn
la source
2
Comment peut-il éditer le fichier / etc / hosts s’il ne peut pas utiliser sudo? Sauf s'il a créé un compte Rood avec un mot de passe (mauvaise idée)
Dennis
9
@Dennis Vous pouvez toujours exécuter sudomême si ce message est affiché. IIRC, vous devez toujours entrer votre mot de passe à chaque appel. Si cela ne fonctionne pas, vous pouvez redémarrer dans la console de récupération et appliquer les modifications. Un compte root avec mot de passe est déconseillé.
Lekensteyn
68

Ajoutez votre nom d'hôte pour /etc/hostsaimer ainsi:

echo $(hostname -I | cut -d\  -f1) $(hostname) | sudo tee -a /etc/hosts
Collin Anderson
la source
2
C'est intelligent, mais je ne pense pas que ce soit plutôt une bonne idée d'automatiser quelque chose comme ça.
mwfearnley
1
Cela ajoute le nom d'hôte au fichier hosts. Il existe une hypothèse inhérente selon laquelle il n'y a rien entre le bouclage ip, le mappage vers localhost et la fin du fichier, mais il y a maintenant des problèmes IPv6 entre cette ligne et la fin du fichier, auquel cas cette solution ne vous donne pas vraiment ce que vous voudriez Un commentaire connexe: La modification de ce fichier ou d’autres fichiers nécessite l’utilisation de sudo et c’est ce que nous essayons de résoudre. Nous devons encore être en mesure de courir sudo. Dans ce cas, sudo -h nom_hôte peut être utilisé pour modifier d’abord les autorisations sur les fichiers ou obtenir l’altitude nécessaire pour les modifier.
Shivesh Suman
1
cela échoue parce que je ne peux pas "sudo tee .." mais c'est ce qui a echo $(hostname -I | cut -d\ -f1) $(hostname) | sudo -h 127.0.0.1 tee -a /etc/hosts
joué
31

Remarque, ceci est une réponse à cette question qui a été fusionnée avec celle-ci.

Votre nom d'hôte ( dave00-G31M-ES2L) n'est pas représenté dans /etc/hosts. Ajouter un Là cette ligne:

127.0.1.1   dave00-G31M-ES2

Alors ça devient:

127.0.1.1   dave00-G31M-ES2L

Pour ce faire, ouvrez une console (appuyez sur Ctrl+ Alt+ T) et tapez:

sudo gedit /etc/hosts

Ajoutez la lettre Lcomme mentionné, sauvegardez et quittez.

Thor
la source
10
Rappelles toi! Utilisez sudoedit(ou sudo -e). Pour spécifier l’éditeur préféré, utilisez la EDITORvariable d’environnement (par exemple export EDITOR=vim), car elle crée une copie hors ligne pour l’édition, puis la remplace proprement après l’édition.
Jan
2
Et il y en a un autre ici qui suggère sudoquand il n'y en a plus sudo. sudone fonctionne pas, monsieur. sudo: unable to resolve host ...
Vert
@Green: Non sudo? Le message d'erreur que vous mentionnez provient de la sudocommande. Peut-être que vous vouliez dire quelque chose de différent?
Thor
@ Green sudofonctionne très bien. Il ne peut tout simplement pas stocker d’état (par exemple, comme Lekensteyn l’a dit ailleurs, vous devez entrer votre mot de passe à chaque fois).
Wlerin
4
Si vous avez ce numéro sur Bash de W10 et que vous venez de Google pour répondre à cette question, voici la réponse qui a fonctionné pour moi. J'ai changé le 127.0.0.1 pour qu'il ressemble à "127.0.0.1 localhost DESKTOP-SLQK4CV" (en faisant "sudo vim / etc / hosts" (astuce rapide pour les débutants vim: appuyez sur i avant de taper pour passer en mode insertion, appuyez sur échap pour quitter). que, écrivez ": wq" pour enregistrer et quitter ou ": q!" pour quitter sans enregistrer), dans mon cas, sudo fonctionnait, mais je viens de dire qu’il ne peut pas se connecter à DESKTOP-SLQK4CV) et que cela a fonctionné pour moi.
Ave
16

J'ai eu ce problème quand j'utilisais Ubuntu sur un VPS. Je l'ai résolu en modifiant le fichier / etc / hosts.

lancez cette commande:

sudo nano /etc/hosts

puis ajoutez:

127.0.0.1   localhost.localdomain localhost
127.0.1.1   ubuntu

J'espère que cela résoudra votre problème :)

PS: N'oubliez pas de redémarrer votre ordinateur!

Luca D'Amico
la source
1
Vérifiez également si le nom de votre périphérique (imprimé sur la barre de titre du terminal après le signe @) correspond au nom figurant sur la deuxième ligne du hostsfichier ("ubuntu" dans l'exemple de Luca). La première ligne peut aussi être juste "localhost".
Waldir Leoncio
2
Rappelles toi! Utilisez sudoedit(ou sudo -e). Pour spécifier l’éditeur préféré, utilisez la EDITORvariable d’environnement (par exemple export EDITOR=vim), car elle crée une copie hors ligne pour l’édition, puis la remplace proprement après l’édition.
Jan
11

J'avais le même problème même si le nom d'hôte de mon fichier / etc / hostname et de mon fichier / etc / hosts correspondait.

Mon nom d'hôte était "staging_1". Il s'avère que vous ne pouvez pas avoir de trait de soulignement dans votre nom d'hôte, c'est pourquoi j'ai eu cette erreur. Changer le trait de soulignement en trait d'union a résolu mon problème.

Chris.B
la source
11

Dans AWS, accédez à votre vpc et activez les "noms d'hôte DNS".

Erick
la source
2
Bienvenue sur askubuntu! Pouvez-vous développer un peu sur ce sujet? Ce que vous voulez dire (du moins pour moi) n'est pas très clair.
Elder Geek
2
C'était la réponse qui m'a aidé. Amazon AWS a changé depuis la dernière fois que je l'ai consulté. Les VPC ont des options DNS, et ils doivent être activés avant que toute résolution DNS puisse fonctionner.
Chris Moore
1
l'option Activer les noms d'hôte DNS peut être trouvée (par exemple) dans le menu contextuel de l'entrée vpc
Matteo Scotuzzi le
Il n'y a pasDNS Hostnames
Vert
7

Le symptôme donné dans la question peut fortement corréler avec ce problème plus spécifique:

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

Cela peut être résolu de différentes manières, l'une d'entre elles consiste à ajouter votre nom d'hôte en tant qu'hôte local /etc/hosts(comme le montrent plusieurs autres réponses). C'est peut-être la bonne chose à faire en général, mais ce n'est pas la seule solution possible.

Un "nom de domaine complet" peut être fourni par un serveur DNS externe ou similaire (s'il est disponible sur votre réseau). Dans ce cas, sudone va pas se plaindre, malgré l'entrée manquante dans /etc/hosts.


Remarque: sudotente de déréférencer le nom d'hôte, même si cela n'est pas nécessairement requis, en raison des fonctionnalités optionnelles du fichier sudoers. Voir la commande sudo qui tente de rechercher un nom d’hôte .

Tant que le délai n'est pas trop long, ce message d'erreur est généralement inoffensif.

nobar
la source
Un peu plus vite:sudo --host=localhost
nobar le
5

J'ai rencontré ce même message d'erreur. Je pense que ce fil de discussion sur AWS Developer Forums est une meilleure solution:

"Allez dans la console de gestion VPC, sélectionnez le VPC, cliquez sur Actions, sélectionnez Modifier les noms d’hôte DNS, puis sélectionnez Oui."

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

utilisateur93581
la source
5

Certains émulateurs de terminal ne mettront pas à jour l'invite avec le nom d'hôte correct jusqu'à ce que vous fermiez et redémarriez l'émulateur (lxterminal, je vous parle).

J'ai passé 30 minutes à lutter contre cette erreur après avoir modifié mon nom d'hôte et mes fichiers hôtes , sudo service hostname restartjusqu'à ce que je sudo hostnamesois sûr que le nom d'hôte soit la nouvelle valeur, même si l'invite affichait l'ancienne valeur.

dagbel
la source
1
Le problème n'est pas les émulateurs de terminal, ce sont les shells qui ont mis en cache la valeur.
Mark Stosberg
4

Dans mon cas, c’était le problème, j’ai changé le hostnameen mancar je voulais savoir s’il existe certains paramètres que vous pouvez utiliser hostname. Au contraire , il a changé ma hostnameà manet j'ai toujours eu le même message que vous

sudo: unable to resolve host (none)

après avoir changé le nom d'hôte à `localhost tout a bien fonctionné à nouveau

hostname localhost
XandruCea
la source
3

Tout le monde conseille de modifier /etc/hosts. Mais dans certains cas, cela peut ne pas être possible (par exemple, dans un conteneur de menu fixe). Donc, je devais trouver un meilleur moyen et je suis venu avec ceci:

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

Les alias ne fonctionnent pas dans les scripts bash, mais nous pouvons utiliser des variables: sudo='sudo -h 127.0.0.1'

dashohoxha
la source
2

Désolé, je ne peux pas vous aider beaucoup, mais comme il est écrit "ne peut pas résoudre l'hôte", essayez de lancer:

hostname

Et voyez si la sortie est le nom d'hôte de la machine. Sinon, le problème vient de la configuration de l'hôte, pas de sudo.

animaletdesequia
la source
Je l'ai fait qui a le nom d'hôte de ma machine. J'ai aussi une entrée dans / etc / hosts. Je reçois toujours l'erreur.
Chandresh
Avez-vous redémarré la machine après avoir modifié le fichier hosts?
animaletdesequia
Non, bien que mon équipe informatique ait dit qu'il y avait un problème avec le fichier de verrouillage ainsi que la clé gpg avec puppetlabs. Maintenant, le
problème a
2

OP a écrit:

Tout était dans / etc / hostname. Sur deux de nos serveurs malades, cela ressemblait à ceci:

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

Alors que sur un serveur sans ce problème, nous avions:

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

Supprimé la linux-web-npartie, redémarré et tout allait bien.

Radu Rădeanu
la source
2

vous risquez de recevoir une erreur si votre hôte ou votre fichier de nom d’hôte contient des caractères non autorisés. Seuls ces symboles sont autorisés: az, AZ, 0-9

Marcello
la source
2

J'ai eu le même problème! J'ai changé le nom de mon VPS via le panneau de configuration de l'administrateur en ligne, ce qui n'a pas changé le nom de la machine dans le fichier hosts. Tout ce que j'ai fait est exécuté:

sudo nano /etc/hosts

Puis je l'ai édité à partir de ceci:

127.0.1.1 Megabyte Megabyte
127.0.0.1 localhost

Pour ça:

127.0.1.1 Debian Debian
127.0.0.1 localhost

et cela a corrigé mon erreur! J'espère que cela a aidé!

Synthé
la source
1

J'ai eu le même problème. Je l'ai résolu en modifiant les fichiers / etc / hosts et / etc / hostname ... du fichier / etc / hosts, modifiez simplement la partie supérieure, comme indiqué ci-dessous.

#vi /etc/hosts
    127.0.0.1   localhost
    127.0.1.1   localhost  myhostname




#vi /etc/hostname
    myhostname
Centy
la source
127.0.1.1 localhost myhostnameou 127.0.1.1 myhostname?
Mostafa Ahangarha
2
Comment pouvez-vous éditer /etc/hostssans sudo. sudone fonctionne passudo: unable to resolve host ...
Vert
1

si vous ne pouvez pas vous connecter, vous POUVEZ vous connecter en tant que root via su. IE: su root (dans un x-term). puis donnez le mot de passe root lorsque vous y êtes invité, vous pourrez ensuite éditer les fichiers avec nano. Le mot de passe root dans 'buntu est identique à celui que vous utiliseriez pour sudo.

Ken Scharf
la source
5
Le mot de passe root dans Ubuntu n'est pas le même mot de passe pour sudo. rootest son propre compte, qui n'a pas de mot de passe défini par défaut.
TheWanderer
1

Si vous utilisez Vagrant, connectez-vous à l'invité et exécutez apt-get --no-install-recommends install virtualbox-guest-utils

Tanmoy
la source
0

Si votre problème concerne ce /etc/hostnamefichier et que les /etc/hostsdeux fichiers ont le nom d’hôte souhaité et que votre ordinateur affiche toujours l’erreur

sudo: unable to resolve host

Essayez, forçant le nom d'hôte

sudo hostname -F /etc/hostname

Vous obtiendrez probablement toujours la même erreur, mais essayez de vous déconnecter et de vous reconnecter. Cela a fonctionné pour moi.

GypsyCosmonaut
la source