Como pode ser que ssh somename funcione, enquanto nslookup somename não funciona?


16

Como saber o endereço IP de algum host que somenameeu puder ssh? Se eu fizer nslookupneste host, ele diz "sem resposta". Como sshresolver o seu nome então?


Nem /etc/hostsnem .ssh/configexplicação funcionou.


EDITAR

Desculpe, somenameestá totalmente qualificado.

ssh somename.somedomain

funciona, enquanto

ping somename.somedomain

e

nslookup somename.somedomain

não


12
Está listado em /etc/hostsou ~/.ssh/config?
— Stephen Kitt

11
O nome também pode ser resolvido usando mDNS (DNS de difusão seletiva) ou LLMNR (resolução de nome de difusão seletiva local).
— Johan Myréen 7/05/19

Ele pode ter uma entrada no seu .ssh / arquivo de configuração
— Tagwint

11
@ Dims Você pode tentar fazer ping somename.local. .localé um domínio especial reservado para mDNS. Para LLMNR, você pode usar este script NMAP.
— Johan Myréen

2
@mckenzm não, não vai.
— Stephen Kitt

Respostas:


31

Nslookup é um programa para consultar servidores de nomes de domínio da Internet . O Nslookup é muito bom para consultar servidores DNS, mas não fornece uma imagem completa quando se trata de resolução de nomes.

No Linux, a resolução de nomes é geralmente controlada pelo NSS, que é configurado por /etc/nsswitch.conf. Especificamente, esta configuração contém uma hostsentrada. Por exemplo:

hosts:          files dns

Na entrada acima, você pode ver que a primeira coisa a ser consultada é filesseguida por dns, o que significa que /etc/hostsserá consultado antes do DNS. Existem outras opções, incluindo LDAP , DNS Multicast e WINS .

Respondendo à sua pergunta diretamente, o SSH resolve o nome do host para um endereço IP usando o NSS (obtendo resultados de várias fontes) em que o nslookup consulta apenas o DNS.

Você pode verificar para qual IP NSS resolve um nome de host usando getent. Por exemplo, para resolver somename:

getent hosts somename

Também no caso do SSH, você pode configurar informações específicas do host em /etc/ssh/ssh_confige ~/.ssh/config. Isso permitirá que você especifique um endereço IP para um nome de host, ignorando completamente a resolução de nomes .:

O seguinte diz ao SSH para usar 192.168.1.25para deve dev.example.com. O SSH usará este endereço, existindo ou não esses nomes como nomes DNS para um IP diferente:

# contents of $HOME/.ssh/config
Host dev dev.example.com
    HostName 192.168.1.25

10

Como saber o endereço IP de algum host que somenameeu puder ssh?

Use a flag detalhada ( -v) do sshcomando:

ssh somename -v

A saída deve conter, entre outras coisas, uma linha que mostra o IP resolvido do servidor ao qual você está se conectando:

debug1: Connecting to aur.archlinux.org [5.9.250.164] port 22.

Se eu procurar neste host, ele diz "sem resposta". Como sshresolver o seu nome então?

A causa mais provável de sshresolver um nome de host que nslookupnão pode é que ele esteja configurado no sshnível.

De acordo com a ssh_config(5)página do manual , há três locais onde os ssharquivos de configuração são procurados:

  1. opções de linha de comando
  2. arquivo de configuração do usuário (~ / .ssh / config)
  3. arquivo de configuração em todo o sistema (/ etc / ssh / ssh_config)

Um desses arquivos pode conter seu nome de host somename(ou um padrão que corresponda a ele) como um alias de outro nome de host ou IP. Por exemplo:

# explicit alias of somename to 8.8.8.8 IP
Host somename
    HostName 8.8.8.8

# pattern alias (that obviously matches somename) to another hostname
# that is itself resolved via DNS (and that can be nslookup-ed).
Host *
    HostName anotherhostname

Consulte as ssh_config(5)explicações Hoste HostNamediretrizes da página de manual e a PATTERNSseção para obter mais informações.


Esta resposta não responde à pergunta, que era como um nome de host é reconhecido, mesmo que não seja servidor por um servidor DNS.
— Johan Myréen 7/05/19

11
A resposta menciona corretamente o cenário muito provável em que ssh user@someserverparece "resolver" o someservernome DNS (mesmo que isso não ocorra de fato). Se o Host someserverestiver configurado no .ssh/configarquivo, é possível usar o comando ssh exatamente como OP afirma, mesmo que someservernão esteja no DNS.
— Fiisch

2
@ JohanMyréen A saída de ssh -v somenameinclui o endereço IP (independentemente de quaisquer ssh_configentradas). Por isso, responde diretamente à pergunta "Como saber o endereço IP de algum host com um nome que eu possa ssh?", Além de ser um bom primeiro passo para responder "Como pode ser que esse ssh somename funcione ...?".
— JigglyNaga

4

Philip está quase lá, mas desce o .ssh/configrathole que é improvável que você tenha configurado.

Os comandos ...

getent hosts somename

... consulta o NSS usando a hosts:linha de pesquisa, em /etc/nsswitch.confvez de apenas o DNS nslookup. É provável que seu ambiente Unix esteja usando mais de um serviço de nomes; possivelmente algum tipo de integração do AD.


3
Eu não diria que segui por esse caminho. Eu adicionei um "também" para completar.
— Philip Couling

@PhilipCouling Claro, mas o seu "pré-também" está incompleto - você não está mostrando como resolver um nome arbitrariamente quando a pergunta é sobre "$ thing versus nsloookup".
— Rich

3
Como já comentado no Q, hostnormalmente faz parte de bind-utils (ou equivalente) e gosta de ambos nslookupe digusa apenas DNS. OTOH getent hosts(ou possivelmente ahosts) faz o que você descreve.
— Dave_thompson_085

@ dave_thompson_085 Incorreto. hostconsulta outros serviços de nome. Concordou que getent hostsé o melhor método inequívoco para consultar "qualquer serviço de nome configurado".
— Rich

11
hosté somente DNS nas páginas de manual e confirmado por testes nos sistemas que eu uso (CentOS, Ubuntu, FreeBSD, Solaris) e também no upstream . Veja também os (próximos) idiotas que comentei no Q, que também dizem isso.
— Dave_thompson_085 10/10/19
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.