Come inviare ssh ai server internamente per nome host senza nome di dominio?


10

Ho bisogno di accedere a più server al lavoro per svolgere il mio lavoro. Mi sto stancando di digitare l'FQDN di un server per accedere. Sto effettuando l'accesso / disconnessione via ssh sulla nostra rete privata. Sono sicuro al 99% che è sulla nostra rete privata b / c tutti i server hanno ip addr 10.xyz C'è un modo per accedere ai server con solo il nome host e non il nome di dominio?

Abbiamo server in più paesi. Il modo in cui i nostri server vengono nominati è molto lungo. Si chiama come segue:

hostname.country.domainname.com

Sto digitando il tunnel carpale ssh me@hostname1.country.domainname.com

... ogni volta che accedo a uno dei nostri server. Se sono negli Stati Uniti e provo ad accedere a un altro host negli Stati Uniti, posso semplicemente digitare ssh me@hostname2e mi connetto bene. Tuttavia, se sono negli Stati Uniti e provo a connettermi a un server in Inghilterra, non riesco a digitare ssh me@hostname3.enge connettermi hostname3.

La soluzione alternativa che ho fatto è stata l'impostazione di un alias nel mio file ~ / .ssh / config per alcuni server. Tuttavia, non credo sia possibile aggiungere oltre 1000 server in quel file. Ho già aggiunto più di 20 server e i miei colleghi pensano che io sia pazzo, anche se penso che siano pazzi per aver digitato il nome di dominio completo quando ci guardiamo intorno.

C'è un modo semplice per noi di impostare qualcosa in modo da non dover digitare ogni volta il nostro domainname.com?

Risposte:


18

È possibile utilizzare caratteri jolly e utilizzare %hnella configurazione

per esempio

Host *.eng
  Hostname %h.domainname.com

Ora quando lo fai ssh foo.engproverai a connetterti foo.eng.domainname.com.

Puoi aggiungere anche altre opzioni a questa configurazione; ad es. forzare il nome utente

Host *.eng
  Hostname %h.domainname.com
  User me

Ora quando lo fai ssh foo.engproverai a connetterti foo.eng.domainname.comcome utente me.

% ssh foo.eng
ssh: Could not resolve hostname foo.eng.domainname.com: Name or service not known

(beh, ovviamente ricevo un errore prima che non sia un nome host valido per me!)

Quindi ora hai bisogno di una sola regola per paese.


Il mio primo pensiero era alias DNS, il secondo era file host, ma mi mancava che ci fossero più server. Questa soluzione sembra eccellente. Quale configurazione ottiene le righe che hai pubblicato?
Xalorous,

Questo succede $HOME/.ssh/configo puoi renderlo ampiamente esteso/etc/ssh/ssh_config
Stephen Harris,

Funziona Con user@*.eng?
Xalorous,

3
Con la regola che ho scritto puoi fare ssh foobar@somewhere.enge funzionerà come previsto. Tutto ciò che fa è riscrivere il componente hostname. Sarà anche lavorare con scpe sftpe così via.
Stephen Harris,

9

Se aggiungi

search domainname.com

a /etc/resolv.conf, e utilizzare hostname.country, ssh(e di altri programmi di rete, in questo caso) verrà automaticamente accodamento domainname.comper voi 1 .

Non credo che l'aggiunta di domini di paesi diversi al tuo searchpercorso sia una buona idea perché potresti avere comportamenti imprevisti se due server in due paesi diversi condividono lo stesso nome host 2

Credo che questo metodo sia meglio che cambiare la sshconfigurazione perché ciò consente hostname.countrydi risolvere indipendentemente dal programma in uso ( telnet, VNC, ...).

Vedere resolv.conf(5)


1 Più precisamente, aggiungerà domainname.comse non può risolvere hostname.countryda solo.

2 In tale scenario hostnameverrà risolto il server nel paese il cui dominio è elencato per primo nel searchpercorso.


2
A proposito, puoi anche farlo come non root e per processo dalla variabile env LOCALDOMAIN. man resolv.conf
rudimeier,

Questo funziona per risolvere l'host SSH, ma se stai usando GSS / Kerberos i nomi non corrisponderanno e l'authing fallirà.
Nick T

7

È possibile utilizzare l' CanonicalDomainsopzione nella configurazione di ssh.

Aggiungendo quanto segue al file di configurazione di ssh, ssh proverà ad aggiungere domainname.coma qualsiasi host che abbia al massimo 1 punto nel suo nome:

CanonicalizeHostname yes
CanonicalDomains domainname.com

Con questa configurazione ssh foo.engsi tenterà innanzitutto di foo.eng.domainname.comeseguire il fallback foo.engse non è possibile trovare l'host. Allo stesso modo, ssh github.comci proverà prima github.com.domainname.com, quindi se vuoi connetterti a GitHub, il tuo server DNS non dovrebbe restituire i record per host non esistenti.

La CanonicalizeMaxDotspuò essere utilizzato per controllare il numero di punti può apparire nel nome host prima di ssh considera pienamente qualificato e non lo fa accodamento domainname.com. il valore predefinito è 1, che dovrebbe essere sufficiente per te dato lo schema che hai attualmente, ma se mai dovessi arrivare a qualcosa di simile hostname.city.countrydovresti aumentarlo.

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.