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

问题描述 投票:0回答:1

我正在尝试通过 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-list,它返回连接的扫描仪等在这里并不重要)发送到 RasPi。

我想要实现的是

$result
包含执行我的命令时返回的数据。

有可能做到这一点吗?如果是的话如何(任何帮助表示赞赏)。如果不是,他们是否有其他方法来解决这个问题?

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

php ssh cmd putty
1个回答
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-command
end-of-command
来识别 Plink 输出的哪一部分真正是命令输出。


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

© www.soinside.com 2019 - 2024. All rights reserved.