Dado um túnel SSH A-B-C, como excluir B?

1

Eu tenho usado uma configuração SSH de 3 máquinas ( A , B , C ) por um tempo. Tanto A como C são máquinas em duas LANs diferentes que desejo conectar e B é minha própria caixa com um endereço público.

Na máquina A , faço isso:

ssh -p 443 -f -N -R 1987:localhost:22 hostname-of-B

Na máquina C eu tenho isso em ~/.ssh/config :

Host hostB
  User user-of-B
  HostName hostname-of-B

Host hostA
  User user-of-A
  ProxyCommand ssh -o 'GatewayPorts yes' -q hostB nc -q0 localhost 1987

Para que eu possa conectar de C a A com:

ssh hostA

Esta configuração funcionou bem, até eu ter que trocar B para outra máquina com uma conexão de internet pior. Agora tudo é super lento, mesmo que A e C tenham uma conexão excelente.

Então, pergunto-me se é possível, após estabelecer a conexão inicial de C a A a B , estabelecer uma conexão direta de A a C . Assim, retirando B da equação e tornando a conexão rápida novamente.

    
por abo-abo 10.10.2016 / 17:38

2 respostas

2

Não, isso não é possível. Você precisa de algo público para avançar. Ou para cada visibilidade de conexão de um servidor do outro.

    
por 10.10.2016 / 18:27
1

Você provavelmente poderia evitar o B lento se tiver qualquer outra máquina X que tenha acesso ssh público. Essa pode ser sua máquina em casa ou uma máquina virtual pública alugada muito barata com boa conexão.

Em C você pode abrir um túnel reverso de X de volta para C:

ssh -Nf -R 10022:localhost:22  user-of-X@hostname-of-X

Então em A você adiciona outro "hop-config" via X

Host hostAviaX
  User user-of-X
  ProxyCommand ssh -o 'GatewayPorts yes'-q hostB nc -q0 localhost 10022

e em A ssh hostAviaX deve funcionar.

Observe se A é sua máquina cliente em uma rede onde você está controlando o roteador, você pode habilitar o encaminhamento de porta para que A tenha acesso ssh público. Nesse caso, você não precisaria de outro X e poderia substituir X == A no exemplo acima.

    
por 10.10.2016 / 19:28

Tags