2017-03-16 3 views
0

Ich möchte den Zugriff auf eine Remote-Raspberry, die hinter einer NAT/Firewall (dynamische IP) ist mit Web-Sockets und damit ein Web-Client implementieren.Remote-SSH zu Rasp hinter NAT über Web

Ich dachte, es über socket.io zu tun. Raspbian und Web Client werden einen gemeinsamen Kanal abonnieren und dann ssh Pakete über diesen Kanal austauschen.

Der schwierige Teil ist ssh Paket zu SSH-Befehle auf Raspberry Seite zu konvertieren. Hat jemals jemand dieses System implementiert?

Vielleicht etwas wie this.

Antwort

0

Wenn Sie Firewalls erhalten möchte nur um mit ssh TMate

Im Folgenden werden die Befehle versuchen, wie es für einen Remote-Setup

benötigt

zu verwenden:

  • TMate
  • ein Google-Konto

`

#!/bin/bash 
#if Internet connection 
if [[ $(ping -W 1 -c 1 8.8.8.8) == *", 0% packet loss,"* ]]; 
then 
    echo online; 
    #if connection already exists 
    if [[ -S /tmp/tmate.sock ]]; 
    then 
     echo "aready up" 
    else 
     tmate -S /tmp/tmate.sock new-session -d 
    fi 
    tmate -S /tmp/tmate.sock wait tmate-ready 
    ssh=$(tmate -S /tmp/tmate.sock display -p '#{tmate_ssh}') 
    ssh=$(sed 's~ssh ~~g' <<< $ssh) 
    echo $ssh 
    #sends ssh session to you 
    curl "https://script.google.com/macro/s/{{ google script location }}/exec?id={{ unique id for raspberry pi }}&ssh=$ssh" > /dev/null 
else 
    #no Internet retry in 30 seconds 
    echo offline; 
    sleep 30s 
    bash {{ location of this script }} 
fi 

Haben Sie den obigen Code auf dem Raspberry Pi mit dem Job Benutzer cron mit @reboot {{ user }} bash {{ location of script }}

Login http://script.google.com/ Google und gehen, wenn es Eingang dieser Code

`

function doGet(e) { 
    var id = e.parameter.id; 
    var ssh = e.parameter.ssh; 
    var ss = SpreadsheetApp.openByUrl("{{ url of google spread sheet to dump data to }}").getActiveSheet(); 
    var lr = ss.getLastRow(); 
    var data = ss.getRange(1,1,lr,1).getValues(); 
    data = data.join("`").split("`"); 
    var loc = data.indexOf(id); 
    if(loc != -1){ 
    ss.getRange(loc+1,2).setValue(ssh); 
    }else{ 
    ss.appendRow([id,ssh]); 
    } 
} 

Jetzt auf dem Google-Skript unter Published Hit als Web-App bereitstellen, erlauben Sie sogar anonym und jetzt haben Sie Ihre Google-Skript-URL.

Hinweise:

  • Alles, was mit {{Sachen}} eingegeben werden, indem Sie
  • Wenn die Raspberry Pi Neustarts Google wird die alte ssh Lage mit dem neuen

überschreiben Alle Sachen, die jenseits von tmate sind, sind nur, um eine Verbindung wiederherzustellen, falls Energie verloren geht oder neu gestartet werden muss

Verwandte Themen