2017-03-16 17 views
0

WebsocketとWebクライアントを使用してNAT /ファイアウォール(動的IP)の背後にあるリモートRaspberryへのアクセスを実装したいと思います。Web経由でNATの背後に激突するリモートSSH

私はsocket.ioでそれをやろうと考えていました。 RaspbianとWeb Clientは共通チャネルに加入し、そのチャネルでsshパケットを交換します。

ラズベリー側のsshパケットをsshコマンドに変換するのは難しい作業です。 誰もこのシステムを実装していませんか?

多分thisのようなものです。

答えて

0

あなただけの周りを取得したい場合は、以下のtmate

は、リモートセットアップ必要

のためにそれを使用する方法を説明しているしようとSSHでファイアウォール:

  • tmate
  • Googleアカウント

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

はGoogleとhttp://script.google.com/に行くために@reboot {{ user }} bash {{ location of script }}

ログインして設定され、ユーザーのcronジョブとラズベリーパイに上記のコードを持っている場合が入力このコード

`

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

今すぐ出版社の下でGoogleスクリプトのWebアプリケーションとして匿名を許可すると、今あなたのGoogleスクリプトのURLを持っている展開をヒット。

注:{{もの}}と

  • 何がラズベリーパイは、Googleが新しいもの

古いSSHの場所に上書きされますリブートする場合

  • によって入力されるようになっていますtmateを超えているすべてのものは、電源を切ったり再起動する必要が生じた場合に接続を再確立するだけです。

  • 関連する問題