Perché SSH non sta risolvendo questo nome host?


12

Quando provo a SSH per un host sulla rete denominata storage, ottengo un errore di risoluzione DNS:

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

Ma quando eseguo una query DNS con host, funziona

$ host storage
storage has address 192.168.20.103

Come è hostpossibile trovare l'IP ma sshnon è possibile?


14
Inizia a prendere l'abitudine di utilizzare FQDN ovunque. Se questo è il primo problema che hai avuto in questo senso, sei straordinariamente fortunato. Questi possono essere davvero pelosi da rintracciare e non sarà l'ultimo. Ecco un suggerimento: storageè un dominio live di primo livello su Internet.
Michael Hampton

Sei in grado di 'ssh' a 192.168.20.103?
IvanGoneKrazy il

2
Dove hai definito il nome host di 192.168.20.103? / etc / hosts?
Orfani,

3
Digitare i nomi di dominio completi è una seccatura. Aliasing "storage" su "storage.mydomain.com" in .ssh / config, d'altra parte, è davvero utile.
pjc50,

1
@ pjc50 scrivo stoe poi premo Tab.
Michael Hampton

Risposte:


28

sshe hostrisolve i nomi seguendo percorsi completamente diversi, quindi non sorprende che a volte producano risultati diversi, specialmente quando il nome da risolvere non è un nome di dominio completo (da cui il suggerimento di utilizzare nomi di dominio completi ovunque).

Non menzioni nulla sul tuo sistema operativo e sulla configurazione del tuo sistema, quindi devo tenerlo generale, tenendo d'occhio Linux: i dettagli di MacOS sono in qualche modo diversi e Windows anche di più, ma i concetti generali sono gli stessi.

  • hostinterroga DNS, quindi in pratica cerca /etc/resolv.confe interroga i server elencati lì, eventualmente allegando un nome di dominio se il nome host non è già completo. Ignora ogni altra possibile fonte, ma attenzione che oggigiorno molti sistemi eseguono un server DNS di memorizzazione nella cache locale (in genere dnsmasq) che legge /etc/hostse altre fonti prima di interrogare altri server DNS, quindi se si hostinterroga quel server locale, i risultati /etc/hostspossono insinuarsi.

  • sshsegue il suo percorso. Descriverò cosa opensshfa sotto Linux, altre implementazioni differiscono. Prima cerca i nickname host definiti nei file di configurazione (a livello di sistema /etc/ssh/ssh_confige per utente ~/.ssh/config), quindi cerca altre fonti nell'ordine specificato dalla hosts:direttiva in /etc/nsswitch.conf. Dì che è qualcosa di simile:

    hosts: files dns
    

    questo significa: cercare /etc/hostse quindi interrogare il DNS (di /etc/resolv.confnuovo). Altre possibili fonti sono i obsoleti nise i netinfoservizi, LDAP, active directory, i nomi.

Per eseguire il debug del tuo caso particolare, dovresti seguire il percorso seguito dalla tua implementazione sshe scoprire dove si blocca.


6
ltrace / strace può darti suggerimenti su come ssh stia effettivamente cercando di risolvere il dominio ... e lo strumento dns da riga di comando più vicino a come lo fa il sistema operativo è probabilmente preso.
Rackandboneman,

La tua raccomandazione di cambiare la /etc/nsswitch.conflettura ha hosts: files dnsfunzionato per me. Proprio come un'interessante nota a margine, ho creato diversi Raspberry Pis con Raspian Jessie nelle ultime settimane e hanno tutti richiesto questo cambiamento.
Patrick Tucci,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.