Por que o logoff de uma sessão SSH é interrompido ao usar o encaminhamento de porta?

5

Eu uso o encaminhamento de porta SSH dinâmico ( -D ) e o encaminhamento de porta SSH normal ( -L ou -R ) para muitas coisas diferentes, incluindo a adição de uma camada de criptografia ao tráfego sem fio da web. O comando que eu uso normalmente é parecido com isto:

ssh -l raam -D 9000 my-linux-server.com

Depois de iniciar o túnel, configuro meu navegador da web para usar um proxy SOCKS v5 de 127.0.0.1 com a porta 9000. Agora, todo o tráfego no meu navegador (exceto DNS) é transmitido por meio do túnel SSH.

Quando eu estiver pronto para fechar o túnel (quando eu estiver levando meu laptop para outro local, por exemplo), simplesmente digite " logout ". No entanto, a sessão SSH trava e eu tenho que pressionar CTRL + c para obter meu prompt local de volta.

Por que isso acontece e como posso evitá-lo?

(Meu palpite é que as conexões que abri no túnel permanecem abertas e meu cliente SSH local está aguardando que elas fechem antes de me devolver o prompt. Se esse for o caso, como posso forçar todas essas conexões a fechar? quando estou pronto para sair?)

    
por Raam Dev 05.06.2009 / 20:23

3 respostas

17

Como você esperava, isso acontece porque o SSH não sai se houver conexões pendentes passando pelo túnel.

Se você sair do seu navegador (e de todos os outros programas que estão passando pelo túnel da porta 9000), o SSH deve sair.

A página man do ssh diz:

 The session terminates when the command or shell on the remote machine exits and all X11 and TCP connections have been closed.

E eu não vejo nenhuma opção para mudar esse comportamento, então eu suspeito que não há nada que você possa fazer.

    
por 05.06.2009 / 20:26
6

Você pode fazer o SSH em segundo plano:

<enter>~&
    
por 05.06.2009 / 20:28
2

Como afirmado no comentário, você pode criar uma conexão somente de túnel usando -f, mas você ainda terá o problema da conexão não terminar até que tudo que estiver usando o túnel tenha sido encerrado. Você pode usar a opção ~ # (seqüência de escape e 'libra') para listar as conexões encaminhadas que você abriu em uma determinada conexão antes de efetuar o logout.

    
por 05.06.2009 / 21:30