
Eu tenho um laptop que às vezes pode estar dentro ou fora da minha rede doméstica. Quando preciso fazer SSH em uma máquina dentro da minha rede, a conexão é bastante simples:
localhost $ ssh machinelearning
Quando estou tentando acessar a máquina deforada minha rede, preciso me conectar ao meu roteador e, em seguida, usar o SSH a partir daí:
localhost $ ssh router.mytotallyuniquedomain.com
router $ ssh machinelearning
Lembro-me de haver um atalho para executar o último comando ~/.ssh/config
, mas no momento não consigo lembrar o que é.
Existe uma maneira de fornecer vários nomes de host ou tipos de conexões para que quando eu fizer isso:
$ ssh machinelearning
O SSH primeiro tentará se conectar ao machinelearning
host na rede local e, em seguida, tentará fazer o túnel através de router.mytotallyuniquedomain.com
, tudo sem que eu precise digitar o nome longo do host?
Responder1
Método #1 – ProxyCommand e netcat
Eu uso essa configuração no meu $HOME/.ssh/config
para facilitar isso:
Host intserver1-o intserver2-o intserver3-o
ProxyCommand ssh [email protected] nc `echo %h|sed 's/-o//'` %p
Eu posso então ssh intserver2-o
de qualquer lugar e entro neste servidor interno. Quando estou em casa na LAN que eu uso ssh intserver1
.
OBSERVAÇÃO:O truque acima requer netcat( nc
) instalado no extserver1.
Método #2 – ssh aninhado
Alternativamente, você também pode usar este método:
$ ssh -t -l gatewayuser gatewayserver "ssh -l serveruser internalserver"
Você está basicamente aninhando chamadas SSH neste método.
Método #3 – ProxyCommand & ssh -W
Com versões mais recentes do SSH (5.4+), você pode usar ssh
em vez nc
do -W
switch.
Host TARGETHOST
ProxyCommand ssh -W %h:%p PROXYHOST
Os %h
& %p
são macros para a porta do nome do host que foram usadas para TARGETHOST
.