Mensagem de erro "sudo: não é possível resolver o host (nenhum)"

736

Quando corro, sudoo terminal fica preso por alguns segundos e emite uma mensagem de erro. Meu terminal fica assim:

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

O que posso fazer para resolvê-lo?

Kit Sunde
fonte
2
Por favor, poste o conteúdo de /etc/hostnamee /etc/hosts.
organize
48
Eu recomendo que não feche esta pergunta por ser muito localizada . Muitos usuários podem pensar erroneamente que colocaram um nome em seu hostsarquivo, mas em um nome diferente, principalmente porque, em muitas redes, os computadores têm nomes semelhantes. Essa pergunta (e resposta) apareceria quando alguém pesquisar com esse problema, e a resposta os levaria a verificar essas discrepâncias, mesmo que o erro de ortografia exato seja diferente.
Eliah Kagan
9
certifique-se do hostnamemesmo com hosts. por exemplo, o nome do host é ubuntu-pc e hosts é ubuntu-pc deve ser o mesmo.
Muhammad Sholihin,
1
Encontrei isso hoje. O problema era que o que eu tinha no nome do host não estava no / etc / hosts. Ou seja: $ hostname => 'mybox' $ grep 'mybox' / etc / hosts => 192.168.1.2 mybox.example.com. Eu precisava adicionar 'mybox' depois do meu nome de domínio em / etc / hosts => 192.168.1.2 mybox.example.com mybox
Ray
3
Não consigo postar uma resposta porque esta pergunta está protegida e não tenho reputação suficiente aqui. No meu caso, eu resolvi o problema reiniciando network-manager: sudo /etc/init.d/network-manager restart. No entanto, estou me perguntando por que, em primeiro lugar, sudoperde tempo aguardando coisas relacionadas à rede. Não deve sudofuncionar sem problemas quando a rede não está disponível?
bli

Respostas:

998

Duas coisas a verificar (supondo que sua máquina seja chamada my-machine, você pode alterar isso conforme apropriado):

  1. Que o /etc/hostnamearquivo contenha apenas o nome da máquina.

  2. Isso /etc/hoststem uma entrada para localhost. Deve ter algo como:

     127.0.0.1 localhost.localdomain localhost
     127.0.1.1 my-machine
    

Se um desses arquivos não estiver correto (já que você não pode sudo), talvez seja necessário reiniciar a máquina no modo de recuperação e fazer as modificações, depois reinicie no ambiente habitual.

Jeremy Kerr
fonte
31
O nome do host não será alterado até que você reinicie. Se você deseja alterá-lo sem reiniciar a máquina, siga as etapas acima e depois execute: - "sudo hostname my-machine" para verificar se isso funcionou, execute "sudo hostname" Ele exibirá o nome do host da sua máquina. Esse método pode ser usado como um método temporário para alterar o nome do host também. após uma reinicialização, o valor do arquivo / etc / hostname é usado.
Yashvit
2
Nota: como você não pode sudo para começar, é difícil editar esses arquivos. Minha solução foi que, de alguma forma, eu consegui sudo visudo e mudei #%admin ALL=(ALL) ALLpara %admin ALL=NOPASSWD: ALL, em seguida, reinicialize e sudo su -, edite esses arquivos, configure / corrija o nome do host, reinicie novamente e tudo funcionou.
21716 Ian Ian
4
Estou usando o subsistema Linux no Windows e enfrentei esse problema. Depois de seguir sua resposta, ela foi resolvida.
amarVashishth
2
você também pode precisar adicionar ::1 localhosta /etc/hosts(esta é a versão IPv6 de 127.0.0.1, aka o endereço de auto-retorno)
Woodrow Barlow
11
Por que seu exemplo tem 127.0.0.1 localhostmas 127.0.1.1 my-machine?
Adam
193

Edite /etc/hosts e acrescente seu novo nome de host à linha 127.0.0.1 (ou crie uma nova linha, se preferir).

O meu se parece com:

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

Substitua penguinno exemplo acima por seu novo nome de host, conforme indicado no /etc/hostnamearquivo

Lekensteyn
fonte
2
Como ele pode editar o arquivo / etc / hosts se não pode sudo? A menos que ele criou uma conta rood com uma senha (má idéia)
Dennis
9
@Dennis Você ainda pode executar, sudomesmo que essa mensagem seja exibida. No IIRC, você ainda precisará digitar sua senha a cada chamada. Se isso não funcionar, você pode reiniciar o console de recuperação e aplicar as alterações. Uma conta root com senha é desencorajada.
Lekensteyn
68

Adicione seu nome de host para /etc/hosts:

echo $(hostname -I | cut -d\  -f1) $(hostname) | sudo tee -a /etc/hosts
Collin Anderson
fonte
2
É inteligente, mas não acho que seja uma boa ideia automatizar algo assim.
Mwfearnley # 03
1
Isso anexa o nome do host ao arquivo de hosts. Existe uma suposição inerente de que não há nada entre o loopback ip e o mapeamento para o host local e o final do arquivo, mas agora existem algumas coisas de IPv6 entre essa linha e o final do arquivo; nesse caso, essa solução realmente não acaba fornecendo a você o que você gostaria. Um comentário relacionado: A edição deste ou de outros arquivos requer o uso do sudo e é isso que estamos tentando corrigir. Ainda precisamos ser capazes de executar o sudo. Nesse caso, sudo -h hostname pode ser usado para alterar primeiro as permissões nos arquivos ou obter a elevação para editá-los.
Shivesh Suman
1
isso falha porque eu não posso "sudo tee .." mas isso fez o truque: echo $(hostname -I | cut -d\ -f1) $(hostname) | sudo -h 127.0.0.1 tee -a /etc/hosts
Ronny Elflein r11lein 07/01
31

Observe que esta é uma resposta a esta pergunta que foi mesclada com esta.

Seu nome de host ( dave00-G31M-ES2L) não está representado /etc/hosts. Adicione um La esta linha:

127.0.1.1   dave00-G31M-ES2

Então se torna:

127.0.1.1   dave00-G31M-ES2L

Para fazer isso, abra um console (pressione Ctrl+ Alt+ T) e digite:

sudo gedit /etc/hosts

Adicione a letra Lconforme mencionado, salve e saia.

Thor
fonte
10
Lembrar! Use sudoedit(ou sudo -e). Para especificar o editor preferido, use a EDITORvariável de ambiente (por exemplo export EDITOR=vim), pois ela cria uma cópia offline para edição e, em seguida, sobrescreve corretamente após a edição.
Janeiro
2
E há outro aqui que sugere sudoquando não existe mais sudo. sudonão funciona senhor. sudo: unable to resolve host ...
Green
@ Green: Não sudo? A mensagem de erro que você menciona vem do sudocomando. Talvez você quis dizer algo diferente?
Thor
@ Green sudofunciona muito bem. Ele simplesmente não pode armazenar nenhum estado (ou seja, como Lekensteyn disse em outro lugar, você deve digitar sua senha todas as vezes).
Wlerin 28/07/19
4
Se você tem esse problema no Bash do W10 e chegou a essa pergunta do google, esta é a resposta que funcionou para mim. Alterei o 127.0.0.1 para "127.0.0.1 localhost DESKTOP-SLQK4CV" (executando "sudo vim / etc / hosts" (dica rápida para iniciantes no vim: pressione i antes de digitar para alternar para o modo de inserção, pressione esc para sair escreva ": wq" para salvar e sair ou ": q!" para sair sem salvar); no meu caso, o sudo funcionou, mas apenas disse que não pode se conectar ao DESKTOP-SLQK4CV) e começou a funcionar para mim.
Ave
16

Eu tive esse problema quando estava usando o ubuntu em um VPS. Eu resolvi editando o arquivo / etc / hosts.

execute este comando:

sudo nano /etc/hosts

e depois adicione:

127.0.0.1   localhost.localdomain localhost
127.0.1.1   ubuntu

Espero que isso resolva seu problema :)

PS: Lembre-se de reiniciar o seu computador!

Luca D'Amico
fonte
1
Além disso, verifique se o nome do seu dispositivo (impresso na barra de título do Terminal após o sinal @) corresponde ao nome na segunda linha do hostsarquivo ("ubuntu" no exemplo de Luca). A primeira linha também pode ser apenas "localhost".
Waldir Leoncio 26/10
2
Lembrar! Use sudoedit(ou sudo -e). Para especificar o editor preferido, use a EDITORvariável de ambiente (por exemplo export EDITOR=vim), pois ela cria uma cópia offline para edição e, em seguida, sobrescreve corretamente após a edição.
Janeiro
11

Eu estava tendo o mesmo problema, apesar de o nome do host no meu arquivo / etc / hostname e no arquivo / etc / hosts corresponderem.

Meu nome de host era "teste_1". Acontece que você não pode ter um sublinhado no nome do host, e é por isso que eu estava recebendo esse erro. Alterar o sublinhado para um hífen corrigiu meu problema.

Chris.B
fonte
11

Na AWS, acesse seu vpc e ative "DNS Hostnames".

Erick
fonte
2
Bem-vindo ao askubuntu! Você pode expandir um pouco sobre isso? Não é claro o que quer dizer (pelo menos para mim) ..
Elder Geek
2
Essa foi a resposta que me ajudou. O Amazon AWS mudou desde a última vez em que olhei para ele. As VPCs têm opções de DNS e precisam ser ativadas antes que qualquer resolução de DNS funcione.
Chris Moore
1
a opção Enable DNS Hostnames pode ser encontrada (por exemplo) no menu do botão direito da entrada VPC
Matteo Scotuzzi
Não háDNS Hostnames
Green
7

O sintoma dado na pergunta pode se correlacionar fortemente com esse problema mais específico:

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

Existem diferentes maneiras de resolver isso, uma das quais é adicionar o nome do host como host local /etc/hosts(como mostrado em várias outras respostas). Isso pode ser a coisa certa a ser feita em geral, mas não é a única solução possível.

Um "nome de domínio totalmente qualificado" pode ser fornecido por um servidor DNS externo ou similar (se disponível na sua rede). Nesse caso, sudonão irá reclamar, apesar da entrada faltante no /etc/hosts.


Nota: sudotenta desreferenciar o nome do host, mesmo que não seja necessariamente necessário, devido aos recursos opcionais no arquivo sudoers. Veja o comando sudo tentando procurar pelo nome do host .

Contanto que o atraso não seja muito longo, essa mensagem de erro normalmente é inofensiva.

nobar
fonte
Um pouco mais rápido:sudo --host=localhost
nobar
Voto positivo para o comando sudo tentando procurar pelo link do nome do host
x-yuri
5

Eu encontrei essa mesma mensagem de erro. Acho que esse tópico de discussão nos fóruns de desenvolvedores da AWS é uma solução melhor:

"Acesse o console de gerenciamento da VPC, selecione a VPC, clique em Ações, selecione Editar nomes de host DNS e selecione Sim."

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

user93581
fonte
5

Alguns emuladores de terminal não atualizarão o prompt com o nome de host correto até você fechar e reiniciar o emulador (lxterminal, estou falando com você).

Passei 30 minutos lutando com esse erro depois de editar meu nome de host e arquivos de hosts e executar sudo service hostname restartaté executar sudo hostnamee ver que o nome de host era o novo valor, mesmo que o prompt mostrasse o valor antigo.

dagbel
fonte
1
A questão não são os emuladores de terminal, são os shells que armazenaram o valor em cache.
Mark Stosberg
4

No meu caso, foi o problema, mudei hostnamepara para manporque queria saber se existem alguns parâmetros nos quais você pode usar hostname. Em vez disso, mudou minha hostnamepara mane sempre recebi a mesma mensagem como você

sudo: unable to resolve host (none)

depois de mudar o nome do host de volta para `localhost, tudo funcionou bem novamente

hostname localhost
XandruCea
fonte
3

Todo mundo aconselha a modificar /etc/hosts. Mas, em alguns casos, isso pode não ser possível (por exemplo, dentro de um contêiner de docker). Então, eu tive que encontrar uma maneira melhor e vim com isso:

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

Os aliases não funcionam em scripts bash, mas podemos usar variáveis: sudo='sudo -h 127.0.0.1'

dashohoxha
fonte
2

Desculpe, não posso ajudá-lo muito, mas, como diz "não é possível resolver o host", tente executar:

hostname

E veja se a saída é o nome do host da máquina. Caso contrário, o problema é a configuração do host, não o sudo.

animaletdesequia
fonte
Eu consegui o nome do host da minha máquina. Eu também tenho entrada no / etc / hosts. Ainda estou recebendo o erro.
Chandresh
Você reiniciou a máquina depois de alterar o arquivo hosts?
Animaletdesequia
Não. Embora minha equipe de TI tenha dito que houve um problema com o arquivo de bloqueio e a chave gpg com os puppetlabs. Agora, ele foi resolvida sem reiniciar ..
Chandresh
2

OP escreveu:

Estava tudo em / etc / hostname. Em dois de nossos servidores doentes, era assim:

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

Enquanto em um servidor sem esse problema, tivemos:

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

Removida a linux-web-nparte, reiniciada e estava tudo bem.

Radu Rădeanu
fonte
2

você pode estar recebendo um erro se os hosts ou o arquivo do nome do host contiverem caracteres ilegais. Somente estes símbolos são permitidos: az, AZ, 0-9

Marcello
fonte
2

Eu tenho esse mesmo problema! Alterei o nome do meu VPS através do painel de controle do administrador on-line, que não alterou o nome da máquina no arquivo hosts. Tudo o que fiz foi executar:

sudo nano /etc/hosts

Então eu editei a partir disso:

127.0.1.1 Megabyte Megabyte
127.0.0.1 localhost

Para isso:

127.0.1.1 Debian Debian
127.0.0.1 localhost

e isso corrigiu meu erro! Espero que isso tenha ajudado!

Synth
fonte
1

Eu tive o mesmo problema. Eu o resolvi editando os arquivos / etc / hosts e / etc / hostname ... no arquivo / etc / hosts, basta editar a parte superior, como mostrado abaixo.

#vi /etc/hosts
    127.0.0.1   localhost
    127.0.1.1   localhost  myhostname




#vi /etc/hostname
    myhostname
Centy
fonte
127.0.1.1 localhost myhostnameou 127.0.1.1 myhostname?
Mostafa Ahangarha 26/03
2
Como você pode editar /etc/hostssem sudo. sudonão funciona #sudo: unable to resolve host ...
Green
1

se você não pode sudo, você PODE logar como root via su. IE: su root (em um termo x). depois forneça a senha de root quando solicitado, e você poderá editar os arquivos com o nano. A senha root no 'buntu é a mesma que você usaria para o sudo.

Ken Scharf
fonte
5
A senha root no Ubuntu não é a mesma senha para sudo. rooté sua própria conta, que não tem uma senha definida por padrão.
TheWanderer
1

Se você estiver usando o Vagrant, faça o login no convidado e execute apt-get --no-install-recommends install virtualbox-guest-utils

tanmoy
fonte
0

Caso seu problema seja esse /etc/hostnamearquivo e /etc/hosts, ambos os arquivos têm o nome de host desejado e sua máquina ainda está mostrando o erro

sudo: unable to resolve host

Tente, forçando o nome do host

sudo hostname -F /etc/hostname

Você provavelmente ainda receberá o mesmo erro, mas tente sair e fazer login novamente. Funcionou para mim.

CiganoCosmonauta
fonte