Por que o SSH não está resolvendo esse nome de host?

12

Quando tento fazer o SSH para um host na rede chamado storage, recebo uma falha na resolução de DNS:

$ ssh storage
ssh: Could not resolve hostname storage: Name or service not known

Mas quando eu consulto o DNS com o host, ele funciona

$ host storage
storage has address 192.168.20.103

Como é que hostpode encontrar o IP, mas sshnão pode?

jldugger
fonte
14
Comece a adquirir o hábito de usar FQDNs em qualquer lugar. Se este é o primeiro problema que você teve nesse sentido, você é extraordinariamente feliz. Estes podem ser realmente difíceis de encontrar, e não será o seu último. Aqui está uma dica: storageé um domínio de nível superior ativo na Internet.
Michael Hampton
Você é capaz de 'ssh' para 192.168.20.103?
21917 IvanGoneKrazy #
2
Onde você definiu o nome do host 192.168.20.103? / etc / hosts?
Orphans
3
Digitar FQDNs é uma dor. Aliasing "storage" para "storage.mydomain.com" em .ssh / config, por outro lado, é realmente útil.
Pjc50
1
@ pjc50 Eu digito stoe depois clico em Tab.
Michael Hampton

Respostas:

28

sshe hostresolva nomes seguindo caminhos completamente diferentes; portanto, não surpreende que eles produzam resultados diferentes às vezes, principalmente quando o nome a ser resolvido não é um FQDN (daí a sugestão de usar FQDNs em todos os lugares).

Você não menciona nada sobre o seu sistema operacional e a configuração do sistema, por isso tenho que mantê-lo geral, de olho no Linux: os detalhes do MacOS são um pouco diferentes e o Windows ainda mais, mas os conceitos gerais são os mesmos.

  • hostconsulta o DNS, então, basicamente, ele /etc/resolv.confpesquisa e consulta os servidores listados lá, possivelmente anexando um nome de domínio se o nome do host ainda não estiver totalmente qualificado. Ele ignora todas as outras fontes possíveis, mas lembre-se de que hoje em dia muitos sistemas executam um servidor DNS de armazenamento em cache local (geralmente dnsmasq) que lê /etc/hostse outras fontes antes de consultar outros servidores DNS, portanto, se hostconsultar esse servidor local, os resultados /etc/hostspoderão se infiltrar.

  • sshsegue seu próprio caminho. Vou descrever o que opensshfaz no Linux, outras implementações diferem. Primeiro, ele procura apelidos de host definidos nos arquivos de configuração (em todo o sistema /etc/ssh/ssh_confige por usuário ~/.ssh/config) e, em seguida, procura outras fontes na ordem especificada pela hosts:diretiva em /etc/nsswitch.conf. Diga que é algo como:

    hosts: files dns
    

    isso significa: procure /etc/hostse, em seguida, consulte o DNS ( /etc/resolv.confnovamente). Outras fontes possíveis são obsoletas nise netinfoserviços, LDAP, diretório ativo, o nome delas.

Para depurar seu caso específico, você deve seguir o caminho que sua implementação sshsegue e descobrir onde ele fica preso.

Dario
fonte
6
O ltrace / strace pode lhe dar dicas de como o ssh está realmente tentando resolver o domínio ... e o mais próximo de como o sistema operacional faz isso, a ferramenta de linha de comando dns provavelmente é obtida.
rackandboneman
Sua recomendação de mudar /etc/nsswitch.confpara ler hosts: files dnsfuncionou para mim. Apenas como uma observação interessante, eu configurei vários Raspberry Pis com Raspian Jessie nas últimas semanas, e todos eles exigiram essa alteração.
Patrick Tucci