Como saber o endereço IP de algum host que somename
eu puder ssh
? Se eu fizer nslookup
neste host, ele diz "sem resposta". Como ssh
resolver o seu nome então?
Nem /etc/hosts
nem .ssh/config
explicação funcionou.
EDITAR
Desculpe, somename
está totalmente qualificado.
ssh somename.somedomain
funciona, enquanto
ping somename.somedomain
e
nslookup somename.somedomain
não
/etc/hosts
ou~/.ssh/config
?somename.local
..local
é um domínio especial reservado para mDNS. Para LLMNR, você pode usar este script NMAP.Respostas:
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 umahosts
entrada. Por exemplo:Na entrada acima, você pode ver que a primeira coisa a ser consultada é
files
seguida pordns
, o que significa que/etc/hosts
será 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
:Também no caso do SSH, você pode configurar informações específicas do host em
/etc/ssh/ssh_config
e~/.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.25
paradev
edev.example.com
. O SSH usará este endereço, existindo ou não esses nomes como nomes DNS para um IP diferente:fonte
Use a flag detalhada (
-v
) dossh
comando:A saída deve conter, entre outras coisas, uma linha que mostra o IP resolvido do servidor ao qual você está se conectando:
A causa mais provável de
ssh
resolver um nome de host quenslookup
não pode é que ele esteja configurado nossh
nível.De acordo com a
ssh_config(5)
página do manual , há três locais onde osssh
arquivos de configuração são procurados: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:Consulte as
ssh_config(5)
explicaçõesHost
eHostName
diretrizes da página de manual e aPATTERNS
seção para obter mais informações.fonte
ssh user@someserver
parece "resolver" osomeserver
nome DNS (mesmo que isso não ocorra de fato). Se oHost someserver
estiver configurado no.ssh/config
arquivo, é possível usar o comando ssh exatamente como OP afirma, mesmo quesomeserver
não esteja no DNS.ssh -v somename
inclui o endereço IP (independentemente de quaisquerssh_config
entradas). 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 ...?".Philip está quase lá, mas desce o
.ssh/config
rathole que é improvável que você tenha configurado.Os comandos ...
... consulta o NSS usando a
hosts:
linha de pesquisa, em/etc/nsswitch.conf
vez de apenas o DNSnslookup
. É provável que seu ambiente Unix esteja usando mais de um serviço de nomes; possivelmente algum tipo de integração do AD.fonte
host
normalmente faz parte de bind-utils (ou equivalente) e gosta de ambosnslookup
edig
usa apenas DNS. OTOHgetent hosts
(ou possivelmenteahosts
) faz o que você descreve.host
consulta outros serviços de nome. Concordou quegetent hosts
é o melhor método inequívoco para consultar "qualquer serviço de nome configurado".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.