Questo è perfettamente fattibile solo con la configurazione ssh, senza dover usare alias separati per lan e wan o creare alcun port forward aggiuntivo. (Ma naturalmente hai bisogno di un modo per rilevare se sei nella tua lan o no)
In ~/.ssh/config
, ti consigliamo di aggiungere qualcosa del genere:
Match host raspi exec "am_i_outside_of_my_lan"
HostName 12.345.67.89
Port 1234
Al posto di am_i_outside_of_my_lan
vorrai inserire un comando che determina se sei all'interno della tua rete domestica o meno, e ritorna con 0 codice di uscita se sei al di fuori di esso, e qualcos'altro.
La host
condizione è probabilmente autoesplicativa, ma la exec
condizione merita una spiegazione: corrisponde solo quando il comando dato ritorna con il codice di uscita 0, cioè. nessun errore.
Quindi, in altre parole, ciò che fa è che la host raspi
parte limita questa regola quando si tenta di connettersi all'host raspi, e exec "am_i_outside_my_lan"
ulteriormente la limita in modo che si applichi solo quando ci si connette dall'esterno della rete domestica. Quindi all'interno della tua rete domestica ssh user@raspi
fa esattamente quello che farebbe normalmente, ma al di fuori di essa la regola corrisponde e invece fa l'equivalente di ssh -p 1234 user@12.345.67.89
.
Per quanto riguarda cosa usare al posto di am_i_outside_of_my_lan
, ciò dipende interamente dalla tua configurazione. Suggerisco di posizionare i comandi in uno script separato invece di provare a scriverlo in linea, perché la citazione sembra essere un po 'difficile da ottenere.
Personalmente, ho usato il seguente script Python per rilevare se sono all'interno della mia rete: (Poiché il mio nome di dominio si risolve in un IP locale all'interno della mia rete)
#! /usr/bin/env python
import socket, sys
sys.exit(socket.gethostbyname('mydomain.com').startswith('192.168.1.'))
Se non hai una configurazione simile, potresti dover fare qualcos'altro. (Ad esempio, potresti guardare il nome della rete wireless a cui sei connesso o persino interrogare un servizio what-is-my-ip per ottenere l'ip esterno della rete a cui sei connesso)