通过Web远程SSH到NAT后面的Rasp

时间:2017-03-16 11:04:04

标签: node.js websocket socket.io raspberry-pi

我想通过使用websockets和Web客户端来实现对NAT /防火墙(动态IP)背后的远程Raspberry的访问。

我想通过Chart.defaults.global.tooltips.custom = function(tooltip) { // Tooltip Element var tooltipEl = document.getElementById('chartjs-tooltip'); // Hide if no tooltip if (tooltip.opacity === 0) { tooltipEl.style.opacity = 0; return; } // Set Text if (tooltip.body) { var total = 0; // get the value of the datapoint var value = this._data.datasets[tooltip.dataPoints[0].datasetIndex].data[tooltip.dataPoints[0].index].toLocaleString(); // calculate value of all datapoints this._data.datasets[tooltip.dataPoints[0].datasetIndex].data.forEach(function(e) { total += e; }); // calculate percentage and set tooltip value tooltipEl.innerHTML = '<h1>' + (value / total * 100) + '%</h1>'; } // calculate position of tooltip var centerX = (this._chartInstance.chartArea.left + this._chartInstance.chartArea.right) / 2; var centerY = ((this._chartInstance.chartArea.top + this._chartInstance.chartArea.bottom) / 2); // Display, position, and set styles for font tooltipEl.style.opacity = 1; tooltipEl.style.left = centerX + 'px'; tooltipEl.style.top = centerY + 'px'; tooltipEl.style.fontFamily = tooltip._fontFamily; tooltipEl.style.fontSize = tooltip.fontSize; tooltipEl.style.fontStyle = tooltip._fontStyle; tooltipEl.style.padding = tooltip.yPadding + 'px ' + tooltip.xPadding + 'px'; }; 来做。 Raspbian和Web Client将订阅一个公共频道,然后他们将通过该频道交换ssh数据包。

困难的部分是在Raspberry端将socket.io数据包转换为ssh命令。 有没有人实现过这个系统?

也许像this

1 个答案:

答案 0 :(得分: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作业,在raspberry pi上安装上述代码

登录谷歌并在输入此代码时转到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]);
  }
}

现在在发布命中部署的google脚本下,因为网络应用甚至允许匿名,现在你有了你的谷歌脚本网址。

注意:

  • 您输入{{stuff}}的任何内容
  • 如果覆盆子pi重新启动谷歌将用新的覆盖旧的ssh位置

除了tmate之外的所有东西只是在断电或需要重启时重新建立连接