Obrigado por resposta do @ till , isso me inspirou muito.
Descobri que você pode redirecionar à força sua conexão com ProxyCommand nc dst dst-port.
Por exemplo, você se conectará de fato B.comse usar
ssh A.com -o ProxyCommand="nc B.com 22"
Mas UserKnownHostsFileainda vai gravar comoA.com
Então você pode adicionar um domínio "automático" ao seu 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'
Eu substituí nc -w 1 %h %ppor(timeout 0.1 nc -z %h %p) && nc %h %p , será mais rápido se você atingir o servidor interno a menos de 100 ms.
Ou você pode substituir por ping, mas isso pode indicar informações incorretas se você usar um proxy baseado em TCP proxychains, ou o servidor não permitir um 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'
Você pode substituir (timeout 0.1 nc -z %h %p) por qualquer coisa que detecte se você está no servidor interno.
Se você possui vários IPs candidatos, você pode usar o seguinte:
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'
Ele tentará se conectar 1.1.1.1, se falhar, tente se conectar 2.2.2.2e, em seguida 3.3.3.3.