2017-03-16 49 views
0

我想通過使用websockets並因此使用Web客戶端來實現對位於NAT /防火牆(動態IP)後面的遠程Raspberry的訪問。遠程SSH到NAT後面的Rasp通過網絡

我想通過socket.io來做到這一點。 Raspbian和Web Client將訂閱一個公共頻道,然後他們將通過該頻道交換ssh數據包。

難題在於將ssh數據包轉換爲Raspberry端的ssh命令。 有沒有人實施過這個系統?

也許類似this

回答

0

如果你只是想避開使用ssh防火牆嘗試tmate

下面是說明如何使用它進行遠程設置

需要:

  • tmate
  • 一個谷歌帳戶

`

#!/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 

對與@reboot {{ user }} bash {{ location of script }}

登錄設置的用戶cron作業的樹莓派上面的代碼谷歌和去http://script.google.com/當輸入該代碼

`

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]); 
    } 
} 

現在在發佈命中部署的谷歌腳本作爲Web應用程序甚至允許匿名,現在你有你的谷歌腳本網址。

注:

  • 任何與{{東西}}是你
  • 是輸入端。如果樹莓派會重新啓動谷歌將覆蓋與新

老SSH位置所有超越tmate的東西只是在失去電源或需要重啓的情況下重新建立連接