Como obter um túnel SSH reverso persistente usando autossh?

3

(apenas perguntei isso no SO, mas foi aconselhado a levá-lo aqui)

Consegui criar um túnel SSH reverso entre um Raspberry Pi 2 e um servidor meu (servidor que tem um IP estático) e funciona bem. A conta de usuário que estou usando no servidor é chamada "ksproxy" (não é realmente um "proxy", mas o que for).

Agora estou tentando fazer autossh(do pacote Debian / Raspbian autossh) funcionar também, mas não estou conseguindo. Eu posso estar perto.

(Alterei o IP real aqui nesta pergunta 37.xxx.yyy.zzzpara não postar o IP real do servidor)

Aqui está o que funciona bem: (sem autossh)

No Rpi:

rspi@antlia:~ $ ssh -N -R 20000:localhost:22 [email protected]

No servidor (aquele com o IP estático):

[email protected]:~$ ssh rspi@localhost -t -p 20000
rspi@localhost's password:
rspi@antlia:~ $

Então, tudo funciona bem: insiro a senha e recebo um terminal / prompt.

Posso até acessar o Raspberry Pi na minha área de trabalho (acessando o servidor pela primeira vez), fazendo:

ssh -t [email protected] "ssh rspi@localhost -p 20000"
[email protected] password:
rspi@localhost's password:
...
rspi@antlia:~

Ele primeiro pede a senha do servidor, depois a senha do Pi e está tudo bem.

Por enquanto, tudo bem.

Agora eu tento o mesmo, mas desta vez com autossh:

rspi@antlia:~ $ autossh -M 20000 -N -i /home/rspi/.ssh/id_rsa [email protected]

[email protected]:~$ ssh rspi@localhost -p 20000

Isso "funciona", mas está preso lá, sem fazer nada.

Eu tentei "-vvv" a saída dos comandos ssh, mas isso apenas mostra que nada está acontecendo.

Se eu tentar outra porta, ela falhará:

[email protected]:~$ ssh rspi@localhost -p 1234
ssh: connect to host localhost port 1234: Connection refused

Se eu tentar a porta correta (20000), mas desta vez com o -tparam, a mesma coisa: "funciona", mas não recebo nenhum terminal / prompt.

Aqui está a -vvvsaída

[email protected]:~$ ssh -vvv rspi@localhost -t -p 20000
OpenSSH_6.7p1 Debian-5+deb8u1, OpenSSL 1.0.1k 8 Jan 2015
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to localhost [127.0.0.1] port 20000.
debug1: Connection established.
debug1: key_load_public: No such file or directory
debug1: identity file /home/ksproxy/.ssh/id_rsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/ksproxy/.ssh/id_rsa-cert type -1
debug1: key_load_public: No such file or directory
...
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u1

Não está pedindo senha, não está mostrando nenhum terminal / prompt.

O que não estou entendendo aqui ou fazendo errado?

Observe que não acho que seja um problema de firewall, pois o método "não autossh" funciona bem (mas não recebo o recurso "sempre ativo" / reconectado). Eu realmente gostaria que o autossh funcionasse (sei que poderia encontrar uma solução alternativa, como se algum crontab reiniciasse automaticamente meu túnel SSH manual, mas isso provavelmente seria mais frágil do que fazer o autossh funcionar).

Cedric Martin
fonte

Respostas:

1
$ autossh -M 20000 -N -i /home/rspi/.ssh/id_rsa [email protected]
...
$ ssh rspi@localhost -p 20000

Nesse caso, você não está usando a -Ropção ssh para configurar um túnel reverso; você está especificando a -Mopção autossh . O parâmetro autossh -M faz com que o autossh configure um túnel nessa porta que o autossh usa para seus próprios propósitos (para testar regularmente se o link SSH ainda está funcionando). Não é o equivalente do parâmetro ssh -R. Quando você se conecta à porta 20000 nesse cenário, está sendo conectado à porta de teste de conexão privada do autossh.

Você deve continuar especificando o túnel reverso que deseja usando a opção -R do ssh. Se você deseja usar o recurso de porta de eco do autossh, execute-o em uma porta diferente:

$ autossh -M 20002 -N -R 20000:localhost:22 [email protected]
Kenster
fonte
muito obrigado, funcionou uma vez que usei "-R" para especificar um túnel reverso. Não estou muito familiarizado com o SSH, mas o fiz funcionar conforme necessário, graças à sua resposta: agora estou anotando tudo isso (e a resposta está segura aqui no SO).
Cedric Martin