访问远程服务器上的 shell 脚本
Accessing shell script on remote server
所以首先我有 2 个服务器:
- Raspberry pi
- Linux Debian 服务器
pi 有一个显示房间当前温度的脚本。
这是脚本:
#!/bin/bash
i2cset -y 1 0x48 0xEE
dte=$(date +%Y-%m-%d)
tme=$(date +%H:%M:%S)
hexraw=$(i2cget -y 1 0x48 0xAA w)
msb=$(echo ${hexraw:4:2})
lsb=$(echo ${hexraw:2:1})
dec=$(printf "%d\n" "0x$msb$lsb")
temp=$(echo "scale=1; $dec/16" | bc)
echo $temp
exit
在 pi 的网站上显示温度工作正常。
但是后来我在 linux 服务器上有另一个脚本,它采用 pi 脚本的值:
#!/bin/bash
x=$(ssh pi@172.16.248.210 sudo /home/pi/CurrTemp;)
echo $x
这也行。但是当我想在我的 Linux 服务器网站(使用 shell_exec())上显示温度时,它不起作用。 var_dump 为空。
PHP:
我试着用 "sudo" 来写它。
我已将脚本所有者更改为 root。
ssh
身份验证不起作用,因为 Web 服务器不能(并且应该)访问您的 ssh 密钥。
您必须选择(后者绝对是首选!):
在 Debian 服务器上为 Web 服务器创建另一个 ssh 密钥并添加到 PI 上的 allowed_keys
。您可以将密钥限制为仅允许该命令。
在 PI 上创建一个小网络服务并以纯文本形式输出温度,xml、json 或其他任何形式。使用 file_get_contents()
通过 HTTP 获取文件,像这样使用纯文本文件:
temperature.php raspberry pi:
<?php
echo shell_exec('/home/pi/CurrTemp');
temperature.php 在 Debian 上:
<?php
$temperature = file_get_contents('http://172.16.248.210/temperature.php');
echo $temperature;
所以首先我有 2 个服务器:
- Raspberry pi
- Linux Debian 服务器
pi 有一个显示房间当前温度的脚本。
这是脚本:
#!/bin/bash
i2cset -y 1 0x48 0xEE
dte=$(date +%Y-%m-%d)
tme=$(date +%H:%M:%S)
hexraw=$(i2cget -y 1 0x48 0xAA w)
msb=$(echo ${hexraw:4:2})
lsb=$(echo ${hexraw:2:1})
dec=$(printf "%d\n" "0x$msb$lsb")
temp=$(echo "scale=1; $dec/16" | bc)
echo $temp
exit
在 pi 的网站上显示温度工作正常。 但是后来我在 linux 服务器上有另一个脚本,它采用 pi 脚本的值:
#!/bin/bash
x=$(ssh pi@172.16.248.210 sudo /home/pi/CurrTemp;)
echo $x
这也行。但是当我想在我的 Linux 服务器网站(使用 shell_exec())上显示温度时,它不起作用。 var_dump 为空。
PHP:
我试着用 "sudo" 来写它。
我已将脚本所有者更改为 root。
ssh
身份验证不起作用,因为 Web 服务器不能(并且应该)访问您的 ssh 密钥。
您必须选择(后者绝对是首选!):
在 Debian 服务器上为 Web 服务器创建另一个 ssh 密钥并添加到 PI 上的
allowed_keys
。您可以将密钥限制为仅允许该命令。在 PI 上创建一个小网络服务并以纯文本形式输出温度,xml、json 或其他任何形式。使用
file_get_contents()
通过 HTTP 获取文件,像这样使用纯文本文件:
temperature.php raspberry pi:
<?php
echo shell_exec('/home/pi/CurrTemp');
temperature.php 在 Debian 上:
<?php
$temperature = file_get_contents('http://172.16.248.210/temperature.php');
echo $temperature;