【问题标题】:Accessing shell script on remote server访问远程服务器上的 shell 脚本
【发布时间】:2015-06-01 00:34:38
【问题描述】:

所以首先我有 2 个服务器:

  1. 树莓派
  2. 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 服务器网站上显示 Temp 时(使用 shell_exec())它不起作用。 var_dump 为空。

PHP:

我试过用“sudo”来写它。

我已将脚本所有者更改为 root。

【问题讨论】:

    标签: php linux bash raspberry-pi shell-exec


    【解决方案1】:

    ssh 身份验证不起作用,因为 Web 服务器无法(并且应该)访问您的 ssh 密钥。

    你必须选择(后者绝对是首选!):

    • 在 Debian 服务器上为 Web 服务器创建另一个 ssh 密钥并添加到 PI 上的 allowed_keys。您可以将密钥限制为仅允许该命令。

    • 在 PI 上创建一个小型 Web 服务,并以纯文本、xml、json 或其他格式输出温度。使用file_get_contents()通过HTTP获取文件,像这样使用纯文本文件:

    temperature.php 在树莓派上:

    <?php
    
    echo shell_exec('/home/pi/CurrTemp');
    

    temperature.php 在 Debian 上:

    <?php
    
    $temperature = file_get_contents('http://172.16.248.210/temperature.php');
    
    echo $temperature;
    

    【讨论】:

    • 对不起,我忘了说我已经在两边创建了一个 RSA 密钥。你的意思是把我的“pi”脚本的输出写在一个json文件中吗?
    • 不,您应该通过 HTTP 输出值。只需echo。首次测试使用纯文本。
    • 所以你的意思是我应该忽略我的 linux 服务器上的一个脚本并将 currTemp 的输出放在 HTTP 中?如果是,它是如何工作的?
    • 在 pi 的网站上使用 .htaccess 会阻止通信吗?
    • 你为什么不测试这个?我无法回答这个问题,因为我无法访问您的 pi。
    猜你喜欢
    • 2012-10-20
    • 2015-04-03
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多