Come può essere che il somename ssh funzioni, mentre il somename nslookup no?


16

Come sapere l'indirizzo IP di qualche host somenameche posso ssh? Se lo faccio nslookupsu questo host dice "nessuna risposta". Come può sshrisolvere il suo nome allora?


/etc/hosts.ssh/configspiegazione funzionato.


MODIFICARE

Siamo spiacenti somenameè pienamente qualificato.

ssh somename.somedomain

funziona, mentre

ping somename.somedomain

e

nslookup somename.somedomain

non fare


12
È elencato in /etc/hostso ~/.ssh/config?
Stephen Kitt,

1
Il nome potrebbe anche essere risolto usando mDNS (DNS multicast) o LLMNR (risoluzione dei nomi multicast Link-Local).
Johan Myréen,

Potrebbe contenere una voce nel tuo file .ssh / config
Tagwint

1
@Dims Potresti provare a fare il ping somename.local. .localè un dominio speciale riservato a mDNS. Per LLMNR è possibile utilizzare questo script NMAP.
Johan Myréen

2
@mckenzm no, non lo farà.
Stephen Kitt,

Risposte:


31

Nslookup è un programma per eseguire query sui server dei nomi di dominio Internet . Nslookup è ottimo per interrogare i server DNS ma non ti dà il quadro completo quando si tratta di risoluzione dei nomi.

Su Linux la risoluzione dei nomi è generalmente controllata da NSS che è configurata da /etc/nsswitch.conf. In particolare, questa configurazione contiene una hostsvoce. Per esempio:

hosts:          files dns

Nella voce precedente puoi vedere che la prima cosa da interrogare è filesseguita da dns, il che significa che /etc/hostsverrà interrogata prima di DNS. Esistono altre opzioni tra cui LDAP , DNS multicast e WINS .

Rispondendo direttamente alla tua domanda, SSH risolve il nome host in un indirizzo IP utilizzando NSS (estraendo risultati da più origini) in cui nslookup richiede solo il DNS.

Puoi verificare quale IP NSS risolve un nome host usando getent. Ad esempio per risolvere somename:

getent hosts somename

Anche nel caso di SSH è possibile configurare informazioni specifiche dell'host in /etc/ssh/ssh_confige ~/.ssh/config. Questo ti permetterà anche di specificare un indirizzo IP per un nome host, saltando completamente la risoluzione dei nomi .:

Quanto segue dice a SSH di utilizzare 192.168.1.25sia per deve dev.example.com. SSH utilizzerà questo indirizzo indipendentemente dal fatto che questi nomi esistano o meno come nomi DNS per un IP diverso:

# contents of $HOME/.ssh/config
Host dev dev.example.com
    HostName 192.168.1.25

10

Come sapere l'indirizzo IP di qualche host somenameche posso ssh?

Usa il flag dettagliato ( -v) del sshcomando:

ssh somename -v

L'output dovrebbe contenere, tra le altre cose, una riga che mostra l'IP risolto del server a cui ci si sta connettendo:

debug1: Connecting to aur.archlinux.org [5.9.250.164] port 22.

Se faccio nslookup su questo host, dice "nessuna risposta". Come può sshrisolvere il suo nome allora?

La causa più probabile di sshpoter risolvere un nome host che nslookupnon è possibile è che è configurato a sshlivello.

Per la ssh_config(5)pagina di manuale , ci sono tre posizioni in cui sshsi trovano i file di configurazione:

  1. opzioni della riga di comando
  2. file di configurazione dell'utente (~ / .ssh / config)
  3. file di configurazione a livello di sistema (/ etc / ssh / ssh_config)

Uno di questi file può contenere il tuo nome host somename(o un modello corrispondente) come alias di un altro nome host o IP. Per esempio:

# explicit alias of somename to 8.8.8.8 IP
Host somename
    HostName 8.8.8.8

# pattern alias (that obviously matches somename) to another hostname
# that is itself resolved via DNS (and that can be nslookup-ed).
Host *
    HostName anotherhostname

Per ulteriori informazioni, consultare le ssh_config(5)spiegazioni Hoste le HostNamedirettive della pagina di manuale e la PATTERNSsezione.


Questa risposta non risponde alla domanda, ovvero come è stato riconosciuto un nome host, anche se non è un server da un server DNS.
Johan Myréen

1
La risposta menziona correttamente uno scenario molto probabile in cui ssh user@someserversembra "risolvere" il someservernome DNS (anche se ciò non accade effettivamente). Se il file Host someserverè configurato nel .ssh/configfile, è quindi possibile utilizzare il comando ssh esattamente come indicato da OP anche se someservernon è presente nel DNS.
Fiisch

2
@ JohanMyréen L'output di ssh -v somenameinclude l'indirizzo IP (indipendentemente da qualsiasi voce ssh_config). Quindi risponde direttamente alla domanda "Come conoscere l'indirizzo IP di un somename host a cui posso accedere?", Oltre ad essere un buon primo passo per rispondere "Come può essere che ssh somename funzioni ...?".
JigglyNaga,

4

Philip è quasi arrivato, ma si dirige verso il basso verso il .ssh/configrathole, che è improbabile che tu abbia configurato.

I comandi ...

getent hosts somename

... interroga NSS usando la hosts:linea di ricerca in /etc/nsswitch.conf, anziché solo DNS come nslookupfa. È probabile che il tuo ambiente Unix stia utilizzando più di un servizio di denominazione; forse un qualche tipo di integrazione AD.


3
Non direi che sono partito per quella strada. Ho aggiunto un "anche" per completezza.
Philip Couling

@PhilipCouling Certo, ma il tuo "pre-also" è incompleto: non stai mostrando come risolvere arbitrariamente un nome quando la domanda riguarda "$ cosa contro nsloookup".
Ricco

3
Come già commentato sulla Q, hostnormalmente fa parte di bind-utils (o equivalente) e come entrambi nslookupe digutilizza solo DNS. OTOH getent hosts(o forse ahosts) fa quello che descrivi.
dave_thompson_085

@ dave_thompson_085 Inesatto. hostinterroga altri servizi di denominazione. Concordato che getent hostsè il miglior metodo inequivocabile per interrogare "qualsiasi nome configurato servizi".
Ricco

1
hostè solo DNS per le pagine man e confermato dai test sui sistemi che utilizzo (CentOS, Ubuntu, FreeBSD, Solaris) e upstream . Vedi anche i (vicino) duplicati che ho commentato sulla Q che dicono anche questo.
dave_thompson_085
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.