如何使用 PuTTY 从远程 SSH 服务器上 PHP 中执行的命令中获取结果?
How to get result from a command executed in PHP on remote SSH server using 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-list,其中 returns 连接的扫描仪等在这里并不重要)到 RasPi。
我要实现的是$result
包含我的命令执行时返回的数据
甚至可以这样做吗?如果是,如何(任何帮助表示赞赏)。如果不是,他们是否有其他方法可以解决这个问题?
解决可能的重复问题:我正在使用 Windows 机器,而且我正在尝试获取(一个命令的)结果以在我的 PHP 脚本中重复使用。在另一个问题中,用户试图保存完整的控制台日志并将其保存到另一个文件。
首先,不要使用 PuTTY。 PuTTY 是一个用于交互式使用的 GUI 应用程序。使用 Plink,它相当于用于命令自动化的 PuTTY command-line/console。作为一个控制台应用程序,它有一个标准输出,可以在 PHP 中阅读(作为 GUI 应用程序的 PuTTY 没有标准输出)。
使用Plink,您还可以在Plink命令行上指定命令,因此您不需要创建test.txt
命令文件。
在任何情况下,都无法让 PuTTY 或 Plink 仅分离命令的输出(至少不是 command-line)。
但是你可以做的,就是打印一些header/trailer来区分命令输出的开始和结束,比如:
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。但这是一个完全不同的问题。
我正在尝试通过 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,其中 returns 连接的扫描仪等在这里并不重要)到 RasPi。
我要实现的是$result
包含我的命令执行时返回的数据
甚至可以这样做吗?如果是,如何(任何帮助表示赞赏)。如果不是,他们是否有其他方法可以解决这个问题?
解决可能的重复问题:我正在使用 Windows 机器,而且我正在尝试获取(一个命令的)结果以在我的 PHP 脚本中重复使用。在另一个问题中,用户试图保存完整的控制台日志并将其保存到另一个文件。
首先,不要使用 PuTTY。 PuTTY 是一个用于交互式使用的 GUI 应用程序。使用 Plink,它相当于用于命令自动化的 PuTTY command-line/console。作为一个控制台应用程序,它有一个标准输出,可以在 PHP 中阅读(作为 GUI 应用程序的 PuTTY 没有标准输出)。
使用Plink,您还可以在Plink命令行上指定命令,因此您不需要创建test.txt
命令文件。
在任何情况下,都无法让 PuTTY 或 Plink 仅分离命令的输出(至少不是 command-line)。
但是你可以做的,就是打印一些header/trailer来区分命令输出的开始和结束,比如:
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。但这是一个完全不同的问题。