Eu recebi o erro "hostname: nome ou serviço desconhecido" ao verificar o IP do hostname

13

Estou executando o Ubuntu 14.04 no serviço de nuvem da minha empresa (minha instância tem IP elástico). Quero verificar o endereço IP da minha instância que estou executando pela linha de comando, mas não funcionou.

root@ubuntu14-graphite:~# hostname
ubuntu14-graphite
root@ubuntu14-graphite:~# hostname -i
hostname: Name or service not known

Eu não entendo o motivo. 

Eu tentei executar ping no ubuntu14-graphite, mas ele disse:

unknown host ubuntu14-graphite.

Isso significa que meu host nem existe?

Eu tenho outro servidor (não instância de nuvem, mas servidor físico). Neste servidor, instalei o CentOS 6.7. Eu verifiquei o IP do nome do host e funcionou mesmo que não houvesse nada de especial /etc/hosts.

Aqui está a saída de cat /etc/hosts:

127.0.0.1   localhost

# 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
ff02::3     ip6-allhosts
Único
fonte

Respostas:

15

Isso significa que "o sistema" (estou usando esse termo em um sentido amplo, geral e ambíguo) não sabe que o nome ubuntu14-graphite corresponde ao seu host e seu endereço IP. (O fato de ser o nome do host não é suficiente para que isso aconteça.) Isso quase certamente significa que você não tem uma linha ubuntu14-graphite no seu /etc/hostsarquivo e não está no seu serviço de nomes (por exemplo, DNS ou NIS). Conseqüentemente, uma maneira de corrigi-lo é adicionar ubuntu14-graphite(e seu endereço IP) ao seu /etc/hosts. Se você estiver usando um sistema de nomes (distribuído) mais sofisticado, como DNS ou NIS (ou talvez ActiveDirectory?), A solução definitiva é adicionar seu host a esse serviço.
_____________
† ...

Há um debate sobre a questão de qual endereço IP você deve associar ao seu nome de host. Todos concordam que deve ser um endereço que "funcione" para o seu host; ou seja, comandos como devem ter sucesso. Algumas pessoas recomendam o uso de um endereço de loopback. Os endereços de loopback sempre têm o formato 127 .BCD ; valores comuns são 127.0.0.1 e 127.0.1.1. Outras pessoas recomendam o uso de um endereço LAN, que pode parecer 192.168 .CD (mas pode ser quase tudo) - mas você não deve colocar um endereço atribuído dinamicamente no arquivo de hosts (e, se estiver usando DHCP com DNS, então os endereços atribuídos dinamicamente devem ser inseridos nos registros DNS automaticamente). Use comandos como e para ver quais endereços estão em uso.ping A.B.C.Difconfighostname -I

G-Man diz que 'restabelece Monica'
fonte
Obrigado sua resposta. Editei minha pergunta porque notei mais um caso relacionado ao meu servidor CentOS, que não tem nada além do 127.0.0.1 localhost, mas ainda assim consigo verificar o IP do meu host.
A Um
Bem, talvez o nome e o endereço do servidor CentOS sejam inseridos no sistema DNS (ou qualquer outro serviço de nomes em uso).
G-Man diz 'Reinstate Monica'
No sistema CentOS, o bind e o bind-utils não foram instalados. Então, eu estou realmente confuso.
1
O @TheOne Ubuntu trata de forma hostnamediferente que os sistemas baseados 127.0.1.1 ubuntu14-graphiteem /etc/hostsRH..putam no arquivo e verificam .. note, 127.0.1.1não 127.0.0.1(que você pode preservar de qualquer maneira apenas para o host local, como no 127.0.0.0/8bloco de loopback, você pode usar qualquer endereço, embora alguns sistemas tenham endereços restritos predefinidos )
heemayl 17/05
@heemayl Então, colocando 127.0.1.1 ubuntu14-graphite em / etc / hosts e verifique o IP, não obtive o IP correto. Isso não faz sentido, certo?
O único
1

A maneira real de verificar o endereço IP de uma máquina é usando o ifconfigcomando

Observe que, dependendo da configuração real da nuvem, a instância do servidor pode não estar ciente do IP público e conhecer apenas um IP da VLAN. Para detalhes sobre isso, você precisa consultar a documentação do seu provedor.

Julie Pelletier
fonte
Não; ip a s. Consulte serverfault.com/q/458628/89813 - ifconfig está obsoleto no Linux.
Reinstate Monica - M. Schröder
0

Adicione a myhostnameentrada ao hostsserviço em /etc/nsswitch.conf.

Em outras palavras, altere esta linha em /etc/nsswitch.conf:

hosts:      files dns

para isso:

hosts:      files dns myhostname

Onde geralmente os nomes de host são resolvidos usando o /etc/hostsarquivo e o DNS, o nome do host do sistema também pode ser resolvido, solicitando ao Name Service Switch que faça isso (como essa alteração na configuração).

Isso explicaria por que você não viu nada de especial sobre o /etc/hostsarquivo no sistema que pudesse resolver o nome do host local.

Mais informações sobre a myhostnamebandeira estão aqui .

Kodey Converse
fonte
0

Na minha opinião, depende da versão do comando hostname (pacote net-tools).

Consulte: https://bugzilla.redhat.com/show_bug.cgi?id=319981

  • exemplo em "openSuse Leap 42.3":
    # hostname -V
    net-tools 1.60
    hostname 1.100 (2001-04-14)

    # hostname -i
    hostname: Name or service not known
  • no Lubuntu 17.10
  $ hostname -V
  hostname 3.18

hostname -i - fornece informações sobre IPv6 e IPv4

Bronek Dzikus
fonte
Esse relatório de bug é sobre hostname -s, não hostname -i. Isso não está relacionado às versões hostname, está relacionado ao fato de o nome do host fornecido por hostnameser resolvível.
Stephen Kitt
-2

Vá para etc / hosts.save, verifique seu nome de host lá. E edite /etc/hosts para escrever lá o nome do host e o nome do host hosts.save. Verifique também o endereço IP. Exemplo:

127.0.0.1    ubuntu   
127.0.1.1    ubuntu.ubuntu-domain    ubuntu
SSS
fonte
1
Definir um IP de host local /etc/hostsnão fornecerá o endereço IP real. Também não entendo por que você também está vendo o /etc/hosts.saveque é um detalhe técnico e muito irrelevante.
Julie Pelletier