Reverse SSH


Raggiungere un Raspberry che si trova in una rete non raggiungibile, ad esempio sotto rete 3G o "nattata"

utilizzando come server un altro Raspberry che ha ip pubblico

Occorre configurare:

Raspberry server: impostare ip privato fisso


Router: aprire la porta esempio 12345 TCP verso la porta 22 all'indirizzo privato del Raspberry server

             aprire la porta esempio 54321 TCP verso la stessa porta 54321 all'indirizzo privato del Raspberry server


Utilizzare un ddns se l'ip pubblico è dinamico ad esempio pippo@dyndns.org

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

Creare una coppia di chiavi ssh senza password nel Raspberry sotto rete non raggiungibile con:


ssh-keygen


Aspettare qualche istante, dare invio al prompt, ancora invio e invio, lasciare il campo Password vuoto


Copiare la chiave pubblica appena creata dal Raspberry della rete non raggiungibile al Raspberry con ip pubblico:

Digitare sul Raspberry della rete non raggiungibile:


ssh-copy-id pi@pippo.dyndns.org -p 12345


Inserire la password dell'utente del Raspberry con ip pubblico


Fare una prova di connessione ssh dal Raspberry della rete non raggiungibile al Raspberry con ip pubblico:

Digitare sul Raspberry della rete non raggiungibile:


ssh -p 12345 pi@pippo.dyndns.org


Si deve accedere al Raspberry con ip pubblico senza richiesta di password

In caso contrario verificare i passaggi precedenti

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

Modificare i file di configurazione sul Raspberry server:


        sudo nano /etc/ssh/sshd_config


aggiungere alla fine del file:


    ClientAliveInterval 30

    GatewayPorts yes      #se non è presente


Poi:


    sudo nano /etc/ssh/ssh_config


aggiungere alla fine del file:


    ServerAliveInterval 15


Modificare i file di configurazione sul Raspberry della rete non raggiungibile (client)


    sudo nano /etc/ssh/sshd_config


aggiungere alla fine del file:


    ClientAliveInterval 30


Poi:


    sudo nano /etc/ssh/ssh_config


aggiungere alla fine del file:


    ServerAliveInterval 15

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

Creare il file bash sul Raspberry della rete non raggiungibile (client)

per instaurare e per verificare la connessione:


    nano tunnel.sh


Copiare all'interno:


  #!/bin/bash

  ps -A x |grep "ssh -N -R pippo.dyndns.org:54321:localhost:22 pi@pippo.dyndns.org -p 12345" |grep -v grep > /dev/null 2>&1

  if [[ $? -eq 1 ]]; then

  ssh -N -R pippo.dyndns.org:54321:localhost:22 pi@pippo.dyndns.org -p 12345 &

   fi


Renderlo eseguibile con:


    chmod +x tunnel.sh


Richiamarlo ogni minuto da crontab:


    crontab -e


Incollare alla fine del file:


     */1 * * * * ~/tunnel.sh > /dev/null 2>&1 &


Crontab avvierà lo script ogni minuto e se la verifica darà esito negativo creerà la connessione

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

Procedura per il collegamento al Raspberry della rete non raggiungibile:


ssh -p 54321 pi@pippo.dyndns.org


oppure


ssh -p 54321 root@pippo.dyndns.org


Digitare la password del Raspberry della rete non raggiungibile



         Raspberry                                                                                                                 Home