Posso configurare Ubuntu per aggiungere un dominio alla fine di una richiesta di nome host ssh?


9

Ho molti server e finiscono tutti con lo stesso server.company.net, quindi ad esempio vded-xx-001.servers.company.net, e mi chiedevo se fosse possibile farlo in modo da poter semplicemente digitare vded- xx-001 e ha aggiunto automaticamente server.company.net?

Quindi vorrei scrivere

ssh user@vded-xx-001

e averlo effettivamente connesso

ssh user@vded-xx-001.servers.company.net

Ho provato a impostare il mio dominio di ricerca DNS su server.company.net, in / etc / network / interfaces, ma questo non ha ottenuto il risultato desiderato.

Qualcuno in grado di indicarmi la giusta direzione?

Grazie in anticipo


C'è qualche motivo per cui non puoi semplicemente aggiungere search company.neta /etc/resolv.conf?
Hennes,

@Hennes L'aggiunta della ricerca company.net e server.company.net a resolv.conf ha funzionato. Tuttavia, nella parte superiore del file è presente un avviso che le mie modifiche verranno sovrascritte, in questo caso come posso renderle permanenti?
Tim Lassie Freeborn,

1
Mi piacerebbe rispondere a questo e inserire il rappresentante extra, ma questo post risponde già abbastanza bene: :-) askubuntu.com/questions/157154/…
Hennes

In realtà, contrariamente a quanto discusso in quella domanda, è normalmente meglio includere un elenco di domini di ricerca in /etc/network/interfaces(usando dns-searchun'opzione) o nel campo di configurazione della connessione di NetworkManager Search domains.
jdthood,

Invece di fare confusione con la configurazione del resolver locale, questa soluzione è più semplice e portatile.
OrangeDog,

Risposte:


19

Probabilmente hai già risolto questo, ma forse in seguito potrebbe aiutare qualcuno: non devi fare confusione con il tuo resolv.conf, puoi solo usare qualcosa di simile nel tuo ~/.ssh/config:

Host vded-*-001 test-*-something-fixed-*
        HostName %h.servers.company.net
        User someusername

Quindi in seguito puoi semplicemente usare:

ssh vded-alotofstuff-001
ssh vded-somethingels-001
ssh test-02-something-fixed-somethingelse

Questa dovrebbe essere la risposta accettata.
slm

Questo è un modo per risolvere il problema, ma non risolve il problema della risoluzione dei nomi a livello di sistema, risolve solo il problema per i nomi host ssh. La migliore pratica per me è essere in grado di ottenere il giusto nome host in tutto il sistema e non dover personalizzare un particolare servizio (ssh) per essere in grado di risolvere particolari nomi host
Philippe Gachoud,

1
Nel caso in cui mi dimentichi e lo ricomincio più tardi, se si desidera consentire sia nomi brevi che lunghi condividendo la stessa configurazione, è sufficiente specificare una prima voce Host vded-*.servers.company.net, con Hostname %h. Quindi in una seconda voce Host vded-*con Hostname %h.servers.company.nete tutti gli altri parametri come Utente, IdentityFile, ecc.
domenica

6

Questa è la soluzione più semplice. Funziona per tutti gli host, non richiede root o accesso a nessun sistema DNS / resolver.

Aggiungi all'inizio del tuo ~/.ssh/configfile (o crea se non esiste già):

CanonicalizeHostname yes
CanonicalDomains servers.company.net

Documentazione ( man 5 ssh_config):

CanonicalizeHostname

Controlla se viene eseguita la canonicalizzazione esplicita del nome host. L'impostazione predefinita, no , non è quella di eseguire la riscrittura dei nomi e lasciare che il resolver del sistema gestisca tutte le ricerche dei nomi host. Se impostato su , allora, per le connessioni che non utilizzano un ProxyCommand , ssh tenterà di canonicalize il nome host specificato nella riga di comando utilizzando le CanonicalDomains suffissi e CanonicalizePermittedCNAMEs regole. Se CanonicalizeHostname è impostato su sempre , la canonicalizzazione viene applicata anche alle connessioni proxy.

Se questa opzione è abilitata, i file di configurazione vengono nuovamente elaborati utilizzando il nuovo nome di destinazione per raccogliere qualsiasi nuova configurazione nelle stanze Host e Match corrispondenti .


Funziona meglio per me. Non è necessario aggiungere CanonicalDomains, solo la prima riga. In questo modo funziona anche se ti connetti ad altre reti.
Adam Wallner,

2
@AdamWallner se non lo aggiungi CanonicalDomains, funzionerà solo sul dominio di ricerca della rete corrente. Se lo fai (e puoi elencarne più), funzionerà per risolvere tutti quei nomi host, su qualsiasi rete a cui potresti connetterti.
OrangeDog,

@ deed02392 è ​​esattamente quello che fa, come dice la documentazione.
OrangeDog

2

Sì, puoi farlo creando un file di configurazione chiamato ~/.ssh/confige inserendo i seguenti contenuti:

Host vded-xx-001
User user
Port 22
HostName vded-xx-001.servers.company.net

Ora devi solo digitare questo (non hai nemmeno più bisogno del nome utente):

$ ssh vded-xx-001

Questo funziona anche con l'utilità della riga di comando scp:

$ scp filename vded-xx-001:/path/

1
Sono consapevole che questo funziona per singoli host ma ne ho centinaia e spero di poter creare una regola che riprenda su VDED- * e quindi per il nome host host.servers.company.net
Tim Lassie Freeborn

1
@TimLassieFreeborn: potresti scrivere uno script che genera le voci necessarie per il file di configurazione. Non so se puoi farlo in modo dinamico, però.
Flimm,

@TimLassieFreeborn guarda la mia risposta
OrangeDog,

2

La soluzione al mio problema era aggiungere il dominio di ricerca a resolv.conf:

search servers.company.net

Questo mi ha permesso di entrare

ssh user@vded-xx-001

per uno qualsiasi dei miei server e si collega all'indirizzo corretto.

Grazie @Hennes per la risposta


2
Supponendo che tu stia eseguendo Ubuntu 12.04 o successivo, non dovresti modificare /etc/resolv.conf direttamente perché l'utilità resolvconf genera quel file. (In realtà genera /run/resolvconf/resolv.conf a cui /etc/resolv.conf è un collegamento simbolico.) Invece è necessario configurare le impostazioni DNS tramite il configuratore di interfaccia, ifup o NetworkManager. Ifup : modifica / etc / network / interfaces e aggiungi una dns-search servers.company.netlinea alla stanza per l'interfaccia di rete esterna della macchina. NM : Aggiungi servers.company.netal Search domainscampo nella scheda IPv4 per la connessione.
jdthood,

Se /etc/resolv.confnon è presente un collegamento simbolico ../run/resolvconf/resolv.confsul computer, eseguire sudo dpkg-reconfigure resolvconfper ripristinare il collegamento simbolico.
jdthood,

1

Se stai usando identità SSH - e con così tanti server vale la pena guardare - allora come ha detto OrangeDog l'impostazione di CanonicaliseHostname e CanonicaliseDomains consentirà anche di abbinare una voce @ cert-Authority nei tuoi host conosciuti

known_hosts entry @ autorità di certificazione * .example.com ssh-rsa AAAddadfkjaeio ...

senza le opzioni Canonicalise dovresti usare "ssh host.example.com"

Con le opzioni Canonicalise "ssh myhost" corrisponderà.

Lo avrei aggiunto come commento alla risposta di OrangeDogs se il rappresentante lo permettesse ...


0

Per una soluzione rapida che funziona su diversi programmi, puoi anche impostare il dominio vded-xx-001in modo che reindirizzi a un indirizzo IP specifico, modificando /etc/hostsper includere una riga come questa:

173.194.41.90  vded-xx-001

Questo funziona nel tuo browser: http://vded-xx-001/

Oltre alle utility da riga di comando come SSH:

$ ssh user@vded-xx-001

(Preferisco personalmente la soluzione di configurazione SSH .)


0

Per la risoluzione del nome di dominio a livello di sistema, mi piace impostare le cose una volta nella mia rete. Quindi impostarei nel server DHCP il nome di dominio e il server DNS in modo da dare a tutte le macchine il diritto resolv.confcompreso

  • IP server DNS primario
  • Dominio
  • direttiva di ricerca

Questo dipende dal server DHCP e dalla configurazione di rete che desideri ... Personalmente non mi piace la configurazione personalizzata della macchina quando è qualcosa di generale per la rete

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.