Grazie per la risposta di @ till , mi ha ispirato molto.
Ho scoperto che puoi reindirizzare forzatamente la tua connessione con ProxyCommand nc dst dst-port.
Ad esempio, ti collegherai infatti a B.comse lo usi
ssh A.com -o ProxyCommand="nc B.com 22"
Ma UserKnownHostsFileregistrerò comunque comeA.com
Quindi potresti aggiungere un dominio "auto" al tuo ssh_config
Host auto.internal-server
Hostname {internal-server ip or domain}
ProxyCommand bash -c '(timeout 0.1 nc -z %h %p) && nc %h %p || ssh -W %h:%p external-server'
Ho sostituito nc -w 1 %h %pcon (timeout 0.1 nc -z %h %p) && nc %h %p, sarà più veloce se potessi raggiungere il server interno meno di 100 ms.
Oppure puoi sostituirlo con ping, ma potrebbe indicare informazioni errate se usi un proxy basato su TCP proxychainso se il server non consente un eco ICMP.
Host auto.internal-server
Hostname {internal-server ip or domain}
ProxyCommand bash -c '(ping %h &>/dev/null) && nc %h %p || ssh -W %h:%p external-server'
Puoi sostituirlo (timeout 0.1 nc -z %h %p)con qualsiasi cosa rilevi se sei nel server interno.
Se hai più IP candidati, anche tu puoi usare questo:
Host auto.internal-server
Hostname {internal-server ip or domain}
ProxyCommand bash -c 'f(){(timeout 0.1 ping -c 1 $1 &>/dev/null) && nc $1 %p;}; f 1.1.1.1 || f 2.2.2.2 || f 3.3.3.3'
Tenterà di connettersi 1.1.1.1, in caso contrario tentare di connettersi 2.2.2.2, quindi 3.3.3.3.