Fechando corretamente o túnel SSH de salto múltiplo

2

Eu quero encapsular o tráfego do VNC para host2 , que só é acessível a partir de host1 , enquanto host1 é acessível publicamente.

Eu configurei um túnel SSH com vários saltos, conforme descrito em esta questão , usando :

ssh -L 5901:localhost:6000 host1 ssh -L 6000:localhost:5901 -N host2

Isso realmente funciona perfeitamente e faz o trabalho. No entanto, não sei como fechar corretamente o túnel aninhado. Eu tentei Ctrl + c mas isso parece matar a primeira ssh instance para host1 . Mas, o segundo túnel ssh entre host1 e host2 permanece aberto, o que é altamente indesejável, pois qualquer um pode realmente encaminhar o tráfego através dele.

Além disso, com a opção -N , não obtenho um tty real em host2 , então não posso simplesmente exit de lá. Sem, -N , ainda não obtenho um tty , em vez disso, recebo o seguinte erro:

Pseudo-terminal will not be allocated because stdin is not a terminal.
Warning: no access to tty (Bad file descriptor).
Thus no job control in this shell.
term: Undefined variable.

Estou iniciando a conexão do MacOS X, e tanto o host1 quanto o host2 estão executando o RHEL 6.

    
por Bichoy 24.04.2015 / 03:17

1 resposta

2

Você está no caminho certo com tty e a opção -t oferece exatamente isso. No entanto, a menos que você esteja realmente com o objetivo de obter uma sessão tty para interagir, deixe esta opção fora do último comando ssh em sua cadeia. No seu caso, você só precisa disso na primeira conexão:

ssh -L 5901:localhost:6000 host1 -t ssh -L 6000:localhost:5901 -N host2

Agora, quando você usa Ctrl-C , o túnel fica entre todos os hosts.

    
por 29.04.2016 / 23:01