Messaggio di errore "sudo: impossibile risolvere l'host (nessuno)"


736

Quando corro, sudoil terminale si blocca per alcuni secondi e quindi emette un messaggio di errore. Il mio terminale è simile al seguente:

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

Cosa posso fare per risolverlo?


2
Si prega di pubblicare i contenuti di /etc/hostnamee /etc/hosts.
organizzare il

48
Sconsiglio di chiudere questa domanda in quanto troppo localizzata . Ci sono molti utenti che potrebbero erroneamente pensare di aver inserito un nome nel loro hostsfile ma di inserire un nome diverso, soprattutto perché su molte reti, i computer hanno nomi simili. Questa domanda (e risposta) si presenterebbe quando qualcuno cerca quel problema e la risposta li spingerebbe a verificare tali discrepanze, anche se l'esatto errore di ortografia sarebbe diverso.
Eliah Kagan,

9
assicurati di essere lo hostnamestesso con hosts. ad es. il nome host è ubuntu-pc e gli host sono ubuntu-pc devono essere uguali.
Muhammad Sholihin,

1
Mi sono imbattuto in questo oggi. Il problema era che quello che avevo in hostname non era in / etc / hosts. Per intenderci: $ hostname => 'mybox' $ grep 'mybox' / etc / hosts => 192.168.1.2 mybox.example.com. Avevo bisogno di aggiungere "mybox" dopo il mio nome di dominio in / etc / hosts => 192.168.1.2 mybox.example.com mybox
Ray

3
Non riesco a pubblicare una risposta perché questa domanda è protetta e non ho abbastanza reputazione qui. Nel mio caso, ho risolto il problema riavviando network-manager: sudo /etc/init.d/network-manager restart. Tuttavia, mi chiedo perché, in primo luogo, sudoperda tempo in attesa di cose relative alla rete. Non dovrebbe sudofunzionare senza problemi quando la rete non è disponibile?
Bla

Risposte:


998

Due cose da controllare (supponendo che la tua macchina sia chiamata my-machine, puoi cambiarla come appropriato):

  1. Che il /etc/hostnamefile contenga solo il nome della macchina.

  2. Questo /etc/hostsha una voce per localhost. Dovrebbe avere qualcosa del tipo:

     127.0.0.1 localhost.localdomain localhost
     127.0.1.1 my-machine
    

Se uno di questi file non è corretto (poiché non è possibile eseguire sudo), potrebbe essere necessario riavviare la macchina in modalità di ripristino ed effettuare le modifiche, quindi riavviare nel normale ambiente.


31
Il nome host non cambierà fino al riavvio. Se desideri cambiarlo senza riavviare la macchina, segui i passaggi precedenti e dopo l'esecuzione: - "sudo hostname my-machine" per vedere se ha funzionato esegui "sudo hostname" Mostrerà il nome host della tua macchina. Questo metodo potrebbe essere utilizzato come metodo temporaneo per modificare anche il nome host. dopo un riavvio, viene utilizzato il valore dal file / etc / hostname.
Yashvit,

2
Nota: poiché non è possibile iniziare con sudo, è difficile modificare tali file. La mia soluzione era che ero in qualche modo in grado di sudo visudo e passare #%admin ALL=(ALL) ALLa %admin ALL=NOPASSWD: ALL, quindi riavviare e sudo su -, modificare quei file, impostare / correggere il nome host, riavviare di nuovo e tutto ha funzionato.
Ian M,

4
Sto usando il sottosistema Linux in Windows e ho riscontrato questo problema. Dopo aver seguito la tua risposta, è stato risolto.
amarVashishth,

2
potrebbe anche essere necessario aggiungere ::1 localhosta /etc/hosts(questa è la versione IPv6 di 127.0.0.1, ovvero l'indirizzo di loopback)
Woodrow Barlow

11
Perché il tuo esempio ha 127.0.0.1 localhostma 127.0.1.1 my-machine?
Adam,

193

Modifica /etc/hosts e aggiungi il tuo nuovo nome host alla riga 127.0.0.1 (o crea una nuova riga se lo preferisci).

Il mio sembra:

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

Sostituisci penguinnell'esempio sopra con il tuo nuovo nome host come indicato nel /etc/hostnamefile.


2
Come può modificare il file / etc / hosts se non può sudo? A meno che non abbia creato un account rood con una password (cattiva idea)
Dennis

9
@Dennis Puoi comunque eseguire sudoanche se quel messaggio è visualizzato. IIRC devi comunque inserire la tua password ad ogni invocazione. Se il problema persiste, è possibile riavviare la console di ripristino e applicare le modifiche. Un account root con password è sconsigliato.
Lekensteyn,

68

Aggiungi il tuo nome host /etc/hostscome piace:

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

2
È intelligente, ma non penso che sia una buona idea automatizzare qualcosa del genere.
mwfearnley,

1
Questo fa un'appendice del nome host al file hosts. C'è un'ipotesi inerente che non ci sia nulla tra l'ip di loopback la mappatura su localhost e la fine del file, ma ora ci sono alcune cose IPv6 tra questa linea e la fine del file, nel qual caso questa soluzione non finisce per darti cosa vorresti. Un commento correlato: la modifica di questo o di altri file richiede l'uso di sudo ed è sudo che stiamo cercando di risolvere. Dobbiamo ancora essere in grado di eseguire sudo. In questo caso sudo -h hostname può essere utilizzato per modificare prima le autorizzazioni sui file o ottenere l'elevazione per modificarli.
Shivesh Suman,

1
questo fallisce perché non posso "sudo tee .." ma questo ha fatto il trucco: echo $(hostname -I | cut -d\ -f1) $(hostname) | sudo -h 127.0.0.1 tee -a /etc/hosts
Ronny Elflein r11lein

31

Nota, questa è una risposta a questa domanda che è stata unita a questa.

Il tuo hostname ( dave00-G31M-ES2L) non è rappresentato in /etc/hosts. Aggiungi un La questa linea:

127.0.1.1   dave00-G31M-ES2

Quindi diventa:

127.0.1.1   dave00-G31M-ES2L

Per fare ciò, apri una console (premi Ctrl+ Alt+ T) e digita:

sudo gedit /etc/hosts

Aggiungi la lettera Lcome indicato, salva ed esci.


10
Ricorda! Usa sudoedit(o sudo -e). Per specificare l'editor preferito, utilizzare la EDITORvariabile di ambiente (ad es. export EDITOR=vim) In quanto crea una copia offline per la modifica e quindi sovrascrive in modo pulito dopo la modifica.
Jan

2
E ce n'è un altro qui che suggerisce sudoquando non c'è più sudo. sudonon funziona, signore. sudo: unable to resolve host ...
Verde,

@Verde: No sudo? Il messaggio di errore che menzioni proviene dal sudocomando. Forse intendevi qualcosa di diverso?
Thor,

@Green sudofunziona bene. Non è in grado di memorizzare alcuno stato (ovvero, come ha detto Lekensteyn altrove, è necessario inserire la password ogni volta).
Wlerin,

4
Se hai questo problema su Bash del W10 e sei arrivato a questa domanda da Google, questa è la risposta che ha funzionato per me. Ho cambiato il 127.0.0.1 per assomigliare a "127.0.0.1 localhost DESKTOP-SLQK4CV" (facendo "sudo vim / etc / hosts" (suggerimento rapido per i principianti di vim: premi i prima di digitare per passare alla modalità di inserimento, premi esc per uscire che, scrivi ": wq" per salvare e uscire o ": q!" per uscire senza salvare), nel mio caso sudo ha funzionato ma ho appena detto che non può connettersi a DESKTOP-SLQK4CV) e ha iniziato a funzionare per me.
Ave,

16

Ho avuto questo problema quando stavo usando Ubuntu su un VPS. L'ho risolto modificando il file / etc / hosts.

eseguire questo comando:

sudo nano /etc/hosts

e quindi aggiungere:

127.0.0.1   localhost.localdomain localhost
127.0.1.1   ubuntu

Spero che risolverà il tuo problema :)

PS: ricorda di riavviare il computer!


1
Inoltre, verifica se il nome del tuo dispositivo (stampato sulla barra del titolo del Terminale dopo il segno @) corrisponde al nome sulla seconda riga del hostsfile ("ubuntu" nell'esempio di Luca). La prima riga potrebbe anche essere solo "localhost".
Waldir Leoncio,

2
Ricorda! Usa sudoedit(o sudo -e). Per specificare l'editor preferito, utilizzare la EDITORvariabile di ambiente (ad es. export EDITOR=vim) In quanto crea una copia offline per la modifica e quindi sovrascrive in modo pulito dopo la modifica.
gennaio

11

Stavo riscontrando lo stesso problema anche se il nome host nel mio file / etc / hostname e / etc / hosts corrispondevano.

Il mio nome host era "staging_1". Si scopre che non è possibile avere un carattere di sottolineatura nel nome host, motivo per cui ho visualizzato questo errore. La modifica del trattino basso in un trattino ha risolto il mio problema.


11

In AWS, vai sul tuo vpc e attiva "DNS Hostnames".


2
Benvenuto in askubuntu! Puoi espanderci un po 'su questo? Non è abbastanza chiaro cosa intendi (almeno per me) ..
Anziano Geek,

2
Questa è stata la risposta che mi ha aiutato. Amazon AWS è cambiato dall'ultima volta che l'ho visto. I VPC hanno opzioni DNS e devono essere attivati ​​prima che qualsiasi risoluzione DNS funzioni.
Chris Moore,

1
l'opzione Abilita nomi host DNS è disponibile (ad esempio) nel menu di scelta rapida della voce vpc
Matteo Scotuzzi

Non c'èDNS Hostnames
Green

7

Il sintomo indicato nella domanda può essere fortemente correlato a questo problema più specifico:

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

Esistono diversi modi per risolvere questo problema, uno dei quali è quello di aggiungere il nome host come localhost /etc/hosts(come mostrato in diverse altre risposte). Questa può essere la cosa giusta da fare in generale, ma non è l'unica possibile risoluzione.

Un "nome di dominio completo" può essere fornito da un server DNS esterno o simile (se disponibile sulla rete). In questo caso, sudonon si lamenterà, nonostante l'entrata mancante in /etc/hosts.


Nota: sudotenta di dereferenziare il nome host, anche se non è necessariamente necessario, a causa delle funzionalità opzionali nel file sudoers. Vedi il comando sudo cercando di cercare il nome host .

Finché il ritardo non è troppo lungo, questo messaggio di errore è generalmente innocuo.


Un po 'più veloce:sudo --host=localhost
nobar il



5

Alcuni emulatori di terminale non aggiorneranno il prompt con il nome host corretto fino alla chiusura e al riavvio dell'emulatore (lxterminal, sto parlando con te).

Ho trascorso 30 minuti a combattere con questo errore dopo aver modificato il mio nome host e i file host e in esecuzione sudo service hostname restartfino a quando non ho eseguito sudo hostnamee ho visto che il nome host era il nuovo valore, anche se il prompt mostrava il vecchio valore.


1
Il problema non sono gli emulatori di terminale, sono le shell che hanno memorizzato nella cache il valore.
Mark Stosberg,

4

Nel mio caso è stato il problema, ho cambiato il hostnameverso manperché volevo sapere se ci sono alcuni parametri che è possibile utilizzare su hostname. Invece mi ha cambiato la hostnameal mane ho sempre avuto lo stesso messaggio come te

sudo: unable to resolve host (none)

dopo aver cambiato il nome host in `localhost tutto ha funzionato di nuovo bene

hostname localhost

3

Tutti consigliano di modificare /etc/hosts. Ma in alcuni casi questo potrebbe non essere possibile (ad esempio all'interno di un contenitore docker). Quindi, ho dovuto trovare un modo migliore e ho trovato questo:

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

Gli alias non funzionano negli script bash, ma possiamo usare le variabili: sudo='sudo -h 127.0.0.1'


2

Spiacenti, non posso aiutarti molto ma, poiché dice "impossibile risolvere l'host", prova a eseguire:

hostname

E vedere se l'output è il nome host della macchina. In caso contrario, il problema è la configurazione dell'host, non sudo.


L'ho fatto per ottenere il nome host della mia macchina. Ho anche voce in / etc / hosts. Ricevo ancora l'errore.
chandresh,

Hai riavviato il computer dopo aver modificato il file hosts?
animaletdesequia

No. Anche se il mio team IT ha detto che c'era un problema con il file di blocco e la chiave gpg con le marionette. Ora, è stato risolto senza riavvio ..
chandresh

2

OP ha scritto:

Era tutto in / etc / hostname. Su due dei nostri server malati sembrava così:

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

Su un server senza questo problema abbiamo avuto:

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

Rimossa la linux-web-nporzione, riavviata e tutto andava bene.


2

potresti ricevere un errore se i tuoi host o file hostname contengono caratteri illegali. Sono ammessi solo questi simboli: az, AZ, 0-9


2

Ho avuto questo stesso problema! Ho cambiato il nome del mio VPS tramite il pannello di controllo dell'amministratore online che non ha cambiato il nome della macchina nel file hosts Tutto quello che ho fatto è stato eseguito:

sudo nano /etc/hosts

Quindi l'ho modificato da questo:

127.0.1.1 Megabyte Megabyte
127.0.0.1 localhost

A questo:

127.0.1.1 Debian Debian
127.0.0.1 localhost

e questo ha corretto il mio errore! Spero che questo abbia aiutato!


1

Ho avuto lo stesso problema. Ho risolto modificando i file / etc / hosts e / etc / hostname ... sul file / etc / hosts, basta modificare la parte superiore come mostrato di seguito.

#vi /etc/hosts
    127.0.0.1   localhost
    127.0.1.1   localhost  myhostname




#vi /etc/hostname
    myhostname

127.0.1.1 localhost myhostnameo 127.0.1.1 myhostname?
Mostafa Ahangarha,

2
Come puoi modificare /etc/hostssenza sudo. sudonon funzionasudo: unable to resolve host ...
Green

1

se non riesci a sudo PUOI accedere come root tramite su. IE: su root (in un termine x). quindi dare la password di root quando richiesto, quindi è possibile modificare i file con nano. La password di root in 'buntu è la stessa password che useresti per sudo.


5
La password di root in Ubuntu non è la stessa password per sudo. rootè il proprio account, che non ha una password impostata per impostazione predefinita.
TheWanderer,

1

Se stai usando Vagrant, accedi al guest ed esegui apt-get --no-install-recommends install virtualbox-guest-utils


0

Nel caso in cui il tuo problema sia quel /etc/hostnamefile e /etc/hosts, entrambi i file hanno il nome host desiderato e il tuo computer mostra ancora l'errore

sudo: unable to resolve host

Prova, forzando il nome host

sudo hostname -F /etc/hostname

Probabilmente otterrai ancora lo stesso errore, ma prova a disconnetterti e riconnetterti. Ha funzionato per me.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.