host é capaz de resolver um nome de host, ssh não é

14

Estou tentando conectar-se de um sistema 10.04 para um sistema 12.04 via SSH. Curiosamente, as regras resolv.confparecem ter efeito apenas seletivamente, o que me deixa perplexo. Observar:

[2] user@mach:~$ ssh pangolin
ssh: Could not resolve hostname pangolin: Name or service not known
[2] user@mach:~$ host pangolin
pangolin.subdomain.domain.tld has address 172.16.7.12

subdomain.domain.tldestá na searchlinha /etc/resolv.confe o uso hostdo nome é pesquisado corretamente, de acordo com essas regras. No entanto, com o cliente SSH ssh, recebo o erro reproduzido acima. Como isso pode ser? Sempre tive a impressão de que as regras de resolução de nomes se resolv.confaplicam ao sistema global.

Nota: /etc/hostsnão declara o nome pangolin. O pacote openssh-serverestá configurado na máquina de destino. A questão é puramente sobre por que a resolução de nomes não é consistente entre esses dois programas.

Outra observação: o comando funciona bem quando insiro o nome de domínio totalmente qualificado, ou seja pangolin.subdomain.domain.tld.

Enquanto isso, reinicializei a máquina cliente (10.04) e o problema ainda existe. Um daemon de armazenamento em cache do DNS não está instalado; portanto, acho que isso não deveria ter sido um problema.


As informações solicitadas no comentário:

$ grep host /etc/nsswitch.conf
hosts:          files dns

/etc/resolv.conf, Eu transformei os nomes de domínio de forma consistente:

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 172.16.1.1
nameserver 172.16.1.5
search subdomain.domain1.com domain1.com domain2 domain3.com domain2.ccTLD domain3.net dev.domain1.com sdk.dev.domain1.com

... e na íntegra /etc/nsswitch.conf:

$ cat /etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

... e /etc/network/interfaces, qual é a fonte resolv.confdo 12.04:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 172.16.1.234
        netmask 255.255.0.0
        gateway 172.16.255.254
        dns-nameservers 172.16.1.1 172.16.1.5
        dns-search domain1.com. domain2. domain3.com. domain2.ccTLD. domain3.net. dev.domain1.com. sdk.dev.domain1.com. subdomain.domain1.com.
        dns-domain subdomain.domain1.com.

Nota: a transformação dos nomes de domínio foi concluída sed, por isso é consistente entre os vários arquivos reproduzidos.


Não existe ~/.ssh/config, mas aqui está o global ( /etc/ssh/ssh_config), reduzido por uma questão de brevidade:

$ grep -v '^#' /etc/ssh/ssh_config |grep -v '^[[:space:]]*$'
Host *
    SendEnv LANG LC_*
    HashKnownHosts yes
    GSSAPIAuthentication yes
    GSSAPIDelegateCredentials no

$ mtr pangolin
Name or service not known: Success
0xC0000022L
fonte
1
Você poderia postar o seu /etc/resolv.confe a saída deste comando grep host /etc/nsswitch.conf?
Awi
@ Awi: acrescentou, além de um pouco mais.
0xC0000022L
Duas perguntas 1) Funciona como pretendido se você usar o fqdn? 2) Você pode publicar o conteúdo de ~ / .ssh / config e / etc / ssh / ssh_config para ver se há alguma estranheza.
Patrick Regan
@ PatrickRegan: vou editar o material solicitado na pergunta. Sim, ele funciona com o fqdn :) ... (também irá ajustar a questão a esse respeito)
0xC0000022L
@STATUS_ACCESS_DENIED: Você vê algo estranho mtr pangolin?
pl1nk

Respostas:

12

Enquanto que sshoutros programas, como pingo glibc resolvedor, procuram o nome do host ('pangolin' neste caso), hostprocuram o nome diretamente no DNS, ignorando o glibc resolvedor. Essa é a diferença.

No entanto, considerando que o resolvedor glibc está, na sua máquina, configurado para tentar dnsdepois files, não consigo explicar por que o resolvedor falha onde hosté bem-sucedido.

Eu já vi esse comportamento relatado antes quando o dnsmasq foi usado como um servidor de nomes de encaminhamento local (https://bugs.launchpad.net/ubuntu/+source/dnsmasq/+bug/998712), mas você não está usando um servidor de nomes local; mas talvez o problema aqui e aqui não esteja no dnsmasq, mas no resolvedor glibc.

jdthood
fonte
Resposta profunda e sucinta. Caminho a percorrer! Obrigado.
0xC0000022L
9

Seu ssh pode tentar resolver o IP6 e expirar o tempo limite. Se você não estiver usando o IP6, tente desabilitar o IP6 /etc/ssh/ssh_configalterando AddressFamily de anypara inet.

Arnaud Kleinveld
fonte
Isso funcionou para mim, obrigado! Eu não percebi antes porque todos os outros servidores já tentavam conectar ao ipv6 suportado.
Mniess
3

Eu me deparei com isso algumas vezes, e isso sempre me impressiona até que lembro das seis restrições de domínio na lista de pesquisa no resolv.conf.

golights
fonte
1. Este é um ponto muito bom. O texto da pergunta inclui uma lista do arquivo resolv.conf (embora pareça ter sido editado para anonimizar as informações). A searchlinha do arquivo contém mais de seis nomes de domínio. O resolvedor glibc analisa apenas os seis primeiros domínios ou 256 caracteres, o que for menor. Especulo que o hostutilitário não tenha essa restrição e que hostconsiga resolver o nome com a sétima ou posterior extensão de nome de domínio.
Jdthood
Observe também que não deve haver uma dns-searchlinha e uma dns-domainlinha em uma única estrofe em / etc / network / interfaces. A dns-domainopção está realmente obsoleta; todos os nomes de domínio de pesquisa devem estar na dns-searchlinha.
Jdthood
3

Eu recebi esse erro colocando uma linha de entrada de domínio antes das duas linhas do servidor de nomes por acidente. nslookup funcionou. wget trabalhou. ssh, scp, rsync falhou.

movendo o domínio para abaixo dos servidores de nomes e salvando o resolv.conf corrigido. nada mais era necessário para mim.

Louy
fonte
3

Sei que essa é uma pergunta antiga, mas vou acrescentar o que funcionou para mim.

Eu tive o mesmo problema e descobri que no meu nsswitch.conf, havia mdnsalém de filese dns. A remoção mdns4resolveu esse problema para mim.

J Hart
fonte
funcionou para mim também - ubuntu 16.04
Buddy Palumbo
-1

Eu estava com problemas para acessar meu servidor sftp. O usuário do ftp não pôde efetuar logon no sftp de outro servidor. (Solaris - Openssh). Comentei a entrada "dns" no nsswitch.conf e o problema foi resolvido.

Obrigado Arun Janardhanan (IBS Software Services)

Uma corrida
fonte