tunnel usando o autossh se comportando de maneira diferente do mesmo comando usando ssh

2

Estou tentando configurar um túnel de ssh duplo entre dois hosts, para que eu possa fazer proxy de tráfego por meio dele.

Usando o comando normal do SSH, obtive o seguinte para funcionar:

    ssh -t -L2000:localhost:2000 user@host1 ssh -D 2000 differentuser@host2

Meu entendimento desse comando é "encaminhar minha porta local 2000 para a porta 2000 no primeiro host remoto, depois tratar a porta local 2000 no primeiro host remoto como um proxy SOCKS para o segundo host remoto". Eu copiei as chaves públicas relevantes para cada host para que cada etapa não precise de senha.

Isso funciona bem, até que uma das conexões caia. Eu tentei usar o autossh para contornar isso, por exemplo:

    autossh -t -L2000:localhost:2000 user@host1 autossh -D 2000 differentuser@host2    

Mas continuou exibindo:

    bind: Address already in use
    channel_setup_fwd_listener: cannot listen to port: 2000

No entanto, recebi uma solicitação de shell do segundo host, mas o túnel não estava funcionando. Então tentei usar portas diferentes entre o primeiro e o segundo hosts da seguinte forma:

    autossh -t -L2000:localhost:2001 user@host1 autossh -D 2001 differentuser@host2

Isso não produziu erros, mas o túnel resultante ainda não funcionou. Fazendo os passos manualmente, por exemplo:

    autossh -L2000:localhost:2000 user@host1

e depois no host 1:

    autossh -D 2000 differentuser@host2

funciona perfeitamente. Gostaria, no entanto, de fazer tudo usando um comando para poder fazer o script.

Alguém pode me ajudar a fazer o autossh para executar o mesmo comportamento que o ssh normal?

Obrigado!

    
por Erin Drummond 05.06.2011 / 04:43

1 resposta

2

Muito boa pergunta. Acabei de fazer um pouco de teste e parece que ssh e autossh tratam a parte final de "comando" da linha de comando de forma diferente. Por exemplo:

$ ssh 0 ls -ld /tmp
tom@0's password: 
drwxrwxrwt 16 root root 4096 2011-06-05 11:17 /tmp
$ autossh 0 ls -ld /tmp
d@'s password:

autossh está analisando o comando final e interpretando os sinalizadores, em vez de deixá-los sozinhos, como ssh faz. Nesse caso, ele interpreta -l como o sinalizador para especificar o usuário remoto. No seu caso, ele está interpretando o -D como uma opção para o primeiro autossh , não o segundo.

Você pode contornar isso colocando a parte do comando entre aspas. No seu exemplo:

autossh -t -L2000:localhost:2000 user@host1 "autossh -D 2000 differentuser@host2"
    
por 05.06.2011 / 05:30