如何使用PuTTY从远程SSH服务器上的PHP中执行的命令中获取结果?

时间:2019-06-07 13:25:15

标签: php ssh cmd putty

我正在尝试通过SSH在Raspberry Pi上执行命令,并在Windows机器上的PHP脚本中获取命令的结果。目前,我可以在RasPi上执行命令,但是我没有将任何结果返回到PHP脚本中。

我为此使用的代码:

<?php

$cmd = "C:\\path_to_putty\\putty.exe -ssh pi@RasPiIP -pw raspberry -m C:\\path_to_test.txt\\test.txt";
$result = shell_exec($cmd);
echo $result;

?>

对于向我的RasPi发送命令,代码有效。我已经通过将test.txt更改为sudo reboot的示例进行了多次测试,并且按预期工作。 我正在使用PuTTY将命令(test.txt当前是nfc列表,将连接的扫描仪等在这里不重要)发送到RasPi。

我想要实现的是$result包含我执行命令时返回的数据。

是否有可能做到这一点?如果是,如何(任何帮助表示赞赏)。如果没有,那么他们也许还有其他方法可以解决这个问题吗?

解决可能的重复项:我正在使用Windows机器,并且试图将结果(一个命令的结果)重新用于PHP脚本中。在另一个问题中,用户正在尝试保存完整的控制台日志并将其保存到另一个文件。

1 个答案:

答案 0 :(得分:2)

首先,不要使用PuTTY。 PuTTY是供交互使用的GUI应用程序。使用Plink,它在命令行/控制台中等同于PuTTY,用于命令自动化。作为控制台应用程序,它具有标准输出,可以用PHP读取(PuTTY,因为GUI应用程序没有标准输出)。

使用Plink,您还可以在Plink命令行上指定命令,因此无需创建test.txt命令文件。

在任何情况下,都无法使PuTTY或Plink仅分离命令的输出(至少不是从命令行)。

但是您可以做的是打印一些标题/尾部,以区分命令输出的开始和结束,例如:

plink.exe -ssh pi@RasPiIP -pw raspberry "echo start-of-command && command && echo end-of-command"

然后在PHP中,您可以查找start-of-commandend-of-command来确定Plink输出的哪一部分实际上是命令输出。


无论如何,最好使用PHP SSH库来实现所需的功能,而不是驱动外部应用程序。例如phpseclib。但这是一个完全不同的问题。