Mensaje de error "sudo: no se puede resolver el host (ninguno)"

736

Cuando ejecuto sudoel terminal está atascado durante unos segundos y luego muestra un mensaje de error. Mi terminal se ve así:

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

¿Qué puedo hacer para resolverlo?

Kit Sunde
fuente
2
Por favor, publique el contenido de /etc/hostnamey /etc/hosts.
organizar el
48
Recomiendo no cerrar esta pregunta como demasiado localizada . Hay muchos usuarios que pueden pensar erróneamente que han puesto un nombre en su hostsarchivo, pero en su lugar ponen un nombre diferente, especialmente porque en muchas redes, las computadoras tienen nombres similares. Esta pregunta (y respuesta) aparecería cuando alguien buscara con ese problema, y ​​la respuesta los incitaría a verificar tales discrepancias, a pesar de que el error ortográfico exacto sería diferente.
Eliah Kagan
99
Asegúrate de lo hostnamemismo con hosts. por ejemplo, el nombre de host es ubuntu-pc y hosts es ubuntu-pc debe ser el mismo.
Muhammad Sholihin 01 de
1
Me encontré con esto hoy. El problema era que lo que tenía en hostname no estaba en / etc / hosts. A saber: $ hostname => 'mybox' $ grep 'mybox' / etc / hosts => 192.168.1.2 mybox.example.com. Necesitaba agregar 'mybox' después de mi nombre de dominio en / etc / hosts => 192.168.1.2 mybox.example.com mybox
Ray
3
No puedo publicar una respuesta porque esta pregunta está protegida y no tengo suficiente reputación aquí. En mi caso, he resuelto el problema reiniciando el gestor de red: sudo /etc/init.d/network-manager restart. Sin embargo, me pregunto por qué, en primer lugar, sudopierde el tiempo esperando cosas relacionadas con la red. ¿No debería sudofuncionar sin problemas cuando la red no está disponible?
bli

Respuestas:

998

Dos cosas para verificar (suponiendo que se llame a su máquina my-machine, puede cambiar esto según corresponda):

  1. Que el /etc/hostnamearchivo contiene solo el nombre de la máquina.

  2. Eso /etc/hoststiene una entrada para localhost. Debería tener algo como:

     127.0.0.1 localhost.localdomain localhost
     127.0.1.1 mi-máquina
    

Si alguno de estos archivos no es correcto (ya que no puede sudo), es posible que deba reiniciar la máquina en modo de recuperación y realizar las modificaciones, luego reinicie en su entorno habitual.

Jeremy Kerr
fuente
31
El nombre de host no cambiará hasta que reinicie. Si desea cambiarlo sin reiniciar la máquina, siga los pasos anteriores y luego ejecute: - "sudo hostname my-machine" para ver si esto ha funcionado ejecute "sudo hostname" Se mostrará el nombre de host de su máquina. Este método puede usarse también como un método temporal para cambiar el nombre de host. después de reiniciar, se usa el valor del archivo / etc / hostname.
Yashvit
2
Nota: dado que no puedes sudo para empezar, es difícil editar esos archivos. Mi solución fue que de alguna manera pude sudo visudo y cambiar #%admin ALL=(ALL) ALLa %admin ALL=NOPASSWD: ALL, luego reiniciar y sudo su -, editar esos archivos, establecer / corregir el nombre de host, reiniciar de nuevo, y todo funcionó.
Ian M
44
Estoy usando Linux Subsystem en Windows y me enfrenté a este problema. Después de seguir su respuesta, se ha resuelto.
amarVashishth
2
También puede ser necesario añadir ::1 localhosta /etc/hosts(esta es la versión IPv6 de 127.0.0.1, también conocido como la dirección de bucle)
Woodrow Barlow
11
¿Por qué tiene tu ejemplo 127.0.0.1 localhostpero 127.0.1.1 my-machine?
Adam
193

Edite /etc/hosts y agregue su nuevo nombre de host a la línea 127.0.0.1 (o cree una nueva línea si lo prefiere).

El mío se ve así:

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

Reemplace penguinen el ejemplo anterior por su nuevo nombre de host como se indica en el /etc/hostnamearchivo.

Lekensteyn
fuente
2
¿Cómo puede editar el archivo / etc / hosts si no puede sudo? A menos que haya creado una cuenta de rood con una contraseña (mala idea)
Dennis
99
@Dennis Todavía puede ejecutar sudoincluso si se muestra ese mensaje. Sin embargo, en el IIRC aún debe ingresar su contraseña en cada invocación. Si esto no funciona, puede reiniciar en la consola de recuperación y aplicar los cambios. Se desaconseja una cuenta raíz con contraseña.
Lekensteyn
68

Agregue su nombre de host para /etc/hostsgustar así:

echo $(hostname -I | cut -d\  -f1) $(hostname) | sudo tee -a /etc/hosts
Collin Anderson
fuente
2
Es inteligente, pero no creo que sea una buena idea automatizar algo como esto.
mwfearnley
1
Esto agrega un nombre de host al archivo de hosts. Hay una suposición inherente de que no hay nada entre el loopback ip, la asignación al localhost y el final del archivo, pero ahora hay algunas cosas de IPv6 entre esta línea y el final del archivo, en cuyo caso esta solución realmente no termina dándole lo que quieras Un comentario relacionado: la edición de este u otros archivos requiere el uso de sudo y es sudo lo que estamos tratando de arreglar. Aún necesitamos poder ejecutar sudo. En este caso, sudo -h hostname se puede usar para cambiar primero los permisos en los archivos u obtener la elevación para editarlos.
shivesh suman
1
esto falla porque no puedo "sudo tee .." pero esto funcionó: echo $(hostname -I | cut -d\ -f1) $(hostname) | sudo -h 127.0.0.1 tee -a /etc/hosts
Ronny Elflein r11lein
31

Tenga en cuenta que esta es una respuesta a esta pregunta que se ha fusionado con esta.

Su nombre de host ( dave00-G31M-ES2L) no está representado en /etc/hosts. Agregue un an La esta línea:

127.0.1.1   dave00-G31M-ES2

Entonces se convierte en:

127.0.1.1   dave00-G31M-ES2L

Para lograr esto, abra una consola (presione Ctrl+ Alt+ T) y escriba:

sudo gedit /etc/hosts

Agregue la letra Lcomo se mencionó, guarde y salga.

Thor
fuente
10
¡Recuerda! Uso sudoedit(o sudo -e). Para especificar el editor preferido, use la EDITORvariable de entorno (p. Ej. export EDITOR=vim) Ya que crea una copia fuera de línea para editar y luego sobrescribe limpiamente después de la edición.
Jan
2
Y hay otro aquí que sugiere sudocuándo ya no existe sudo. sudoNo funciona, señor. sudo: unable to resolve host ...
Verde
@Green: sudo¿ No ? El mensaje de error que menciona proviene del sudocomando. ¿Quizás quisiste decir algo diferente?
Thor
@ Green sudofunciona bien. Simplemente no puede almacenar ningún estado (es decir, como Lekensteyn dijo en otro lugar, debe ingresar su contraseña cada vez).
Wlerin
44
Si tiene este problema en W10's Bash y llegó a esta pregunta de google, esta es la respuesta que funcionó para mí. Cambié el 127.0.0.1 para que se vea como "127.0.0.1 localhost DESKTOP-SLQK4CV" (haciendo "sudo vim / etc / hosts" (consejo rápido para los novatos vim: presione i antes de escribir para cambiar al modo de inserción, presione esc para salir eso, escriba ": wq" para guardar y salir o ": q!" para salir sin guardar), en mi caso sudo funcionó pero solo dijo que no se puede conectar a DESKTOP-SLQK4CV) y comenzó a funcionar para mí.
Ave
16

Tuve este problema cuando estaba usando ubuntu en un VPS. Lo resolví editando el archivo / etc / hosts.

ejecuta este comando:

sudo nano /etc/hosts

y luego agregue:

127.0.0.1   localhost.localdomain localhost
127.0.1.1   ubuntu

Espero que eso resuelva tu problema :)

PD: ¡Recuerde reiniciar su computadora!

Luca D'Amico
fuente
1
Además, vea si el nombre de su dispositivo (impreso en la barra de título de la Terminal después del signo @) coincide con el nombre en la segunda línea del hostsarchivo ("ubuntu" en el ejemplo de Luca). La primera línea también puede ser solo "localhost".
Waldir Leoncio
2
¡Recuerda! Uso sudoedit(o sudo -e). Para especificar el editor preferido, use la EDITORvariable de entorno (p. Ej. export EDITOR=vim) Ya que crea una copia fuera de línea para editar y luego sobrescribe limpiamente después de la edición.
Jan
11

Estaba teniendo el mismo problema a pesar de que el nombre de host en mi archivo / etc / hostname y / etc / hosts coinciden.

Mi nombre de host era "staging_1". Resulta que no puede tener un guión bajo en su nombre de host, por lo que recibí este error. Cambiar el guión bajo a un guión solucionó mi problema.

Chris.B
fuente
11

En AWS, vaya a su vpc y active "Nombres de host DNS".

Erick
fuente
2
Bienvenido a askubuntu! ¿Puedes ampliar un poco sobre esto? No está muy claro lo que quieres decir (al menos para mí) ..
Élder Geek
2
Esta fue la respuesta que me ayudó. Amazon AWS cambió desde la última vez que lo vi. Las VPC tienen opciones de DNS y deben activarse antes de que funcione cualquier resolución de DNS.
Chris Moore
1
la opción Habilitar nombres de host DNS se puede encontrar (por ejemplo) en el menú contextual de la entrada vpc
Matteo Scotuzzi
No hayDNS Hostnames
Verde
7

El síntoma dado en la pregunta puede correlacionarse fuertemente con este problema más específico:

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

Hay diferentes maneras de resolver esto, una de las cuales es agregar su nombre de host como localhost /etc/hosts(como se muestra en varias otras respuestas). Esto puede ser lo correcto en general, pero no es la única solución posible.

Un servidor DNS externo o similar puede proporcionar un "nombre de dominio completo" (si está disponible en su red). En este caso, sudono se quejará, a pesar de la falta de entrada /etc/hosts.


Nota: sudointenta desreferenciar el nombre de host, aunque no sea necesariamente necesario, debido a las capacidades opcionales en el archivo sudoers. Vea el comando sudo tratando de buscar el nombre de host .

Mientras el retraso no sea demasiado largo, este mensaje de error suele ser inofensivo.

sin bar
fuente
Algo más rápido:sudo --host=localhost
nobar
Voto a favor del comando sudo que intenta buscar el enlace del nombre de host
x-yuri
5

Encontré este mismo mensaje de error. Creo que este hilo de discusión en AWS Developer Forums es una mejor solución:

"Vaya a la consola de administración de VPC, seleccione la VPC, haga clic en Acciones, seleccione Editar nombres de host DNS y seleccione Sí".

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

usuario93581
fuente
5

Algunos emuladores de terminal no actualizarán la solicitud con el nombre de host correcto hasta que cierre y reinicie el emulador (lxterminal, estoy hablando con usted).

Pasé 30 minutos luchando con este error después de editar mi nombre de host y los archivos de hosts y ejecutarlos sudo service hostname restarthasta que ejecuté sudo hostnamey vi que el nombre de host era el nuevo valor, a pesar de que el mensaje mostraba el valor anterior.

dagbel
fuente
1
El problema no son los emuladores de terminal, son los shells los que han almacenado en caché el valor.
Mark Stosberg
4

En mi caso fue el problema, cambié hostnamea manporque quería saber si hay algunos parámetros que pueda usar hostname. En lugar cambió mi hostnamepara many siempre tengo el mismo mensaje como usted

sudo: unable to resolve host (none)

después de volver a cambiar el nombre de host a `localhost, todo volvió a funcionar bien

hostname localhost
XandruCea
fuente
3

Todo el mundo aconseja modificar /etc/hosts. Pero en algunos casos esto puede no ser posible (por ejemplo, dentro de un contenedor acoplable). Entonces, tuve que encontrar una mejor manera y se me ocurrió esto:

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

Los alias no funcionan en los scripts de bash, pero podemos usar variables: sudo='sudo -h 127.0.0.1'

dashohoxha
fuente
2

Lo siento, no puedo ayudarte mucho, pero como dice "no se puede resolver el host", intenta ejecutar:

hostname

Y vea si la salida es el nombre de host de la máquina. Si no, el problema es la configuración del host, no sudo.

animaletdesequia
fuente
Hice que obtuve el nombre de host de mi máquina. También tengo entrada en / etc / hosts. Todavía recibo el error.
chandresh
¿Reinició la máquina después de cambiar el archivo de hosts?
animaletdesequia
No. Aunque mi equipo de TI dijo que había problemas con el archivo de bloqueo, así como con la clave gpg con puppetlabs. Ahora, que se resolvió sin necesidad de reiniciar ..
Chandresh
2

OP escribió:

Todo estaba en / etc / hostname. En dos de nuestros servidores enfermos se veía así:

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

Mientras estábamos en un servidor sin este problema tuvimos:

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

Se eliminó la linux-web-nporción, se reinició y todo estuvo bien.

Radu Rădeanu
fuente
2

es posible que reciba un error si sus hosts o el archivo de nombre de host contienen caracteres ilegales. Solo se permiten estos símbolos: az, AZ, 0-9

Marcello
fuente
2

¡Yo tuve el mísmo problema! Cambié el nombre de mi VPS a través del panel de control de administración en línea que no cambió el nombre de la máquina en el archivo de hosts. Todo lo que hice fue ejecutar:

sudo nano /etc/hosts

Luego lo edité de esto:

127.0.1.1 Megabyte Megabyte
127.0.0.1 localhost

A esto:

127.0.1.1 Debian Debian
127.0.0.1 localhost

y eso solucionó mi error! Espero que esto haya ayudado!

Sintetizador
fuente
1

Yo tuve el mismo problema. Lo resolví editando los archivos / etc / hosts y / etc / hostname ... en el archivo / etc / hosts, solo edite la parte superior como se muestra a continuación.

#vi /etc/hosts
    127.0.0.1   localhost
    127.0.1.1   localhost  myhostname




#vi /etc/hostname
    myhostname
Centy
fuente
127.0.1.1 localhost myhostnameo 127.0.1.1 myhostname?
Mostafa Ahangarha
2
¿Cómo puedes editar /etc/hostssin sudo? sudono funcionasudo: unable to resolve host ...
Verde
1

si no puede sudo, PUEDE iniciar sesión como root a través de su. IE: su raíz (en un término x). luego proporcione la contraseña de root cuando se le solicite, luego puede editar los archivos con nano. La contraseña de root en 'buntu es la misma que la contraseña que usarías para sudo.

Ken Scharf
fuente
55
La contraseña de root en Ubuntu no es la misma contraseña sudo. rootes su propia cuenta, que no tiene una contraseña establecida de forma predeterminada.
TheWanderer
1

Si está utilizando Vagrant, inicie sesión en el invitado y ejecute apt-get --no-install-recommends install virtualbox-guest-utils

tanmoy
fuente
0

En caso de que su problema sea ese /etc/hostnamearchivo /etc/hosts, ambos archivos tienen su nombre de host deseado y su máquina aún muestra el error

sudo: unable to resolve host

Intenta, forzando el nombre de host

sudo hostname -F /etc/hostname

Probablemente aún obtendrá el mismo error, pero intente cerrar la sesión y volver a iniciarla. Funcionó para mí.

GitanoCosmonauta
fuente