Dipende dalla rete ~ / .ssh / config?


15

In ufficio, posso collegarmi a macchine interne senza un proxy, ma ho bisogno di un proxy per le connessioni esterne. Al di fuori dell'ufficio, posso collegarmi ad altre macchine esterne senza un proxy, ma devo usare uno dei 2 proxy per collegarmi alle macchine interne.

Se riesco a trovare un modo per rilevare automaticamente la rete in cui mi trovo, posso indicare a ssh di caricare il file di configurazione appropriato?

In caso contrario, esiste una soluzione più elegante della scrittura di uno script di shell per collegare in modo simbolico il file di configurazione appropriato a ~ / .ssh / config (la mia migliore idea finora)?

Modifica: Penso che @pcm e JonnyRo abbiano capito la mia domanda e proverò quello che suggeriscono, ma solo per essere chiari, voglio

|--------\    Dest   | abc.example.com | xyz.external.org |
| Source  \---------\|                 |                  |
|--------------------+-----------------+------------------|
| example.com office | No Proxy        | Proxy            |
| outside            | Proxy           | No Proxy         |

Risposte:


11

A seconda della configurazione del proxy, è possibile creare semplicemente una voce di configurazione SSH che funzioni in entrambe le situazioni. Ad esempio su una rete che uso regolarmente devo ssh su un host intermedio prima di poter effettuare una connessione in uscita. Quindi fondamentalmente ho impostato una configurazione simile a questa.

# proxy ssh 
Host *%sshproxy
    ProxyCommand ssh user@proxyhost.example.org /bin/netcat -w 1 $(echo %h | cut -d%% -f1) 22

Host myhost.example.org
    HostName 172.16.24.1

Host otherhost.example.com
    HostName 192.168.57.12

Quindi quando non ho bisogno di usare un proxy, posso semplicemente eseguire un comando simile ssh myhost.example.orge connettermi, ma quando ho bisogno del proxy, eseguo il comando ssh myhost.example.org%sshproxy.

Ho il sospetto che tu possa probabilmente configurare una sorta di alias o un'impostazione di completamento automatico che aggiungerebbe automaticamente il %proxybit.


8

Vecchia domanda, ma alcune idee in questo thread mi hanno aiutato e questa è una soluzione che mi è venuta in mente:

Innanzitutto, la configurazione ssh del server proxy .

Match Originalhost proxy Exec "ifconfig | grep 10.0.1"
     Hostname 10.0.1.2
Host proxy 
     Hostname external.hostname.com

Quindi, la configurazione del server B :

Match Originalhost server-b Exec "ifconfig | grep 10.0.1"
     ProxyCommand none
Host server-b
     Hostname 10.0.1.3
     ProxyCommand ssh -W %h:%p server-a

L'idea qui è che il caso predefinito si connette da un sito esterno e ProxyCommand avvia prima una connessione ssh al proxy e quindi si connette al server-b . Se invece ci troviamo già nella sottorete locale, il ProxyCommand è disabilitato e non viene stabilita alcuna connessione proxy al server-a .

Indipendentemente da dove ti trovi, puoi sempre raggiungere server-abc con questa voce e questa configurazione capisce dove ti trovi e imposta la connessione di conseguenza. Per server-xyz , basta usare la stessa idea.

Ho fatto una spiegazione più approfondita qui: http://blog.kihltech.com/2017/04/ssh-conditional-host-address-based-on-network-or-location/


7

È possibile utilizzare l'opzione -F per selezionare tra diversi file di configurazione. per i due casi di rete. È quindi possibile creare alias che utilizzano i diversi file di configurazione, in base alla rete su cui ci si trova, o nella configurazione dello script di accesso un singolo alias, in base all'indirizzo IP.


Grazie! Gli alias con -F saranno sicuramente il mio fallback se non riesco a far funzionare uno script basato su IP.
Nate Parsons,

È fantastico, stavo per fare la stessa domanda. Ho già scritto alcune altre opzioni per impostare le variabili di ambiente quando avvio un nuovo terminale, posso facilmente creare un alias o un collegamento simbolico al corretto .ssh / config in base all'ambiente.
newz2000,

1

Scrivi uno script di shell che controlla il tuo IP in base a un modello, quindi collega simbolicamente lo script di shell appropriato.

Se per qualche motivo il tuo intervallo IP è lo stesso per casa e lavoro, prova a cambiare in base a /etc/resolv.conf, che contiene i server DNS configurati DHCP.


0

L'opzione "Host" in .ssh / config consente di modificare la configurazione in base alla destinazione. Lo uso per regolare il port forwarding e simili in base a dove sto andando.


0

Ho esaminato questa domanda in passato e una possibile soluzione è quella di avere tale voce nel file di configurazione:

Host ENTRY_POINT
Hostname ENTRY_POINT_FQDN
User USERNAME

Host *.INSIDE_DOMAIN
ProxyCommand ssh ENTRY_POINT nc %h %p

In questo modo, se sei all'esterno, puoi $ ssh machine.inside_domain. Se sei dentro e stai risolvendo il DNS, puoi $ ssh machine. Funziona bene per me.

Forse qualcuno può migliorare questa idea, magari cambiando la configurazione DNS in modo che risolva automaticamente machine in machine.inside_domain se ci si trova all'esterno e si utilizza il punto di ingresso SSH.

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.