Túnel SSH criado a partir de localização remota, mas acesso não confiável do computador local

0

Dois computadores:

  1. Desktop-Ubuntu; IP local fixo, conectado a um modem com a porta 22 aberto e encaminhando para ele. Por causa do IP dinâmico eu tenho uma conta no-ip. Então domain-Desktop-Ubuntu.com encaminha as solicitações recebidas para este computador.
  2. Remote Raspberry Pi 3 conectado a uma rede celular que tem todas as solicitações recebidas fechadas pelo ISP.

Eu preciso do acesso SSH do Desktop-Ubuntu para o RPi. Porque não é possível diretamente eu construí um túnel. Depois de tudo classificar ou tentar fazê-lo funcionar de forma persistente ( autossh , por exemplo), este é o meu esquema:

Na RPi :

sshd_config :

 ClientAliveInterval 120     
 ClientAliveCountMax 720

Crontab a cada 5 minutos para verificar se ssh ID do processo não é nulo.
screen é usado para manter ssh output como uma janela de shell separada.

*/5 * * * * /bin/sh /path-to/check-ssh-tunnel.sh

check-ssh-tunnel.sh :

COMMAND="/usr/bin/screen -dmS ssh-Ubuntu /usr/bin/ssh -R 2255:localhost:22 [email protected] -g"
COMMAND_SSH="/usr/bin/ssh -R 2255:localhost:22 domain-Desktop-Ubuntu.com -g"
PID=$(/usr/bin/pgrep -f -x "$COMMAND_SSH")
if [ "$PID" = "" ]
then
    $COMMAND
fi

Aqui está o ps aux | grep ssh que eu recebo 3 horas após a reinicialização:

pi        2128  0.0  0.2   5396  2252 ?        Ss     08:25     0:00 /usr/bin/SCREEN -dmS ssh-Desktop-Ubuntu /usr/bin/ssh -R 2255:localhost:22 [email protected] -g  
pi        2130  0.0  0.5   9132  4748 pts/0    Ss+  **08:25**   0:00 /usr/bin/ssh -R 2255:localhost:22 [email protected] -g

Se eu kill 2128 cron funcionar e:

pi        4755  0.0  0.2   5396  2092 ?        Ss     11:25     0:00 /usr/bin/SCREEN -dmS ssh-Desktop-Ubuntu /usr/bin/ssh -R 2255:localhost:22 [email protected] -g     
pi        4756  0.0  0.5   9132  4840 pts/0    Ss+  **11:25**   0:00 /usr/bin/ssh -R 2255:localhost:22 [email protected] -g

Para acessar o RPi do Desktop-Ubuntu :

ssh -p 2255 pi@localhost

Meu problema é que essa conexão age aleatoriamente:

  • às vezes ele pede uma senha e eu me conecto
  • às vezes ssh: connect to host localhost port 2255: Connection refused
  • às vezes leva muito tempo para finalmente gerar ssh_exchange_identification: read: Connection reset by peer Depois de tentar novamente: Connection refused .

De volta ao RPi nada parece ser alterado:

$ screen -r      # to get the ssh window
[email protected]~$ ssh -p 2255 pi@localhost
ssh: connect to host localhost port 2255: Connection refused

Neste momento e para todos os testes, estou gerenciando o RPi remotamente usando o Teamviewer. Por alguns motivos, não quero usá-lo no futuro, a menos que seja absolutamente necessário. É por isso que preciso de um túnel SSH.

O que está errado? Como fazer o túnel funcionar de forma confiável?

    
por dstonek 20.01.2018 / 16:15

0 respostas

Tags