Estou tentando conectar-se de um sistema 10.04 para um sistema 12.04 via SSH. Curiosamente, as regras resolv.conf
parecem 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.tld
está na search
linha /etc/resolv.conf
e o uso host
do 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.conf
aplicam ao sistema global.
Nota: /etc/hosts
não declara o nome pangolin
. O pacote openssh-server
está 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.conf
do 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
fonte
/etc/resolv.conf
e a saída deste comandogrep host /etc/nsswitch.conf
?mtr pangolin
?Respostas:
Enquanto que
ssh
outros programas, comoping
o glibc resolvedor, procuram o nome do host ('pangolin' neste caso),host
procuram 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
dns
depoisfiles
, não consigo explicar por que o resolvedor falha ondehost
é 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.
fonte
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_config
alterando AddressFamily deany
parainet
.fonte
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.
fonte
search
linha 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 ohost
utilitário não tenha essa restrição e quehost
consiga resolver o nome com a sétima ou posterior extensão de nome de domínio.dns-search
linha e umadns-domain
linha em uma única estrofe em / etc / network / interfaces. Adns-domain
opção está realmente obsoleta; todos os nomes de domínio de pesquisa devem estar nadns-search
linha.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.
fonte
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
, haviamdns
além defiles
edns
. A remoçãomdns4
resolveu esse problema para mim.fonte
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)
fonte