【问题标题】:How to get result from a command executed in PHP on remote SSH server using PuTTY?如何使用 PuTTY 从远程 SSH 服务器上的 PHP 中执行的命令获取结果?
【发布时间】:2019-10-23 00:21:46
【问题描述】:

我正在尝试通过 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 向 RasPi 发送我的命令(test.txt 目前是 nfc-list,它返回连接的扫描仪等在此处并不重要)。

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

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

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

【问题讨论】:

  • 可能想要c:/path/to/putty.exe,也可能想要c:/some/path/to/test.txt
  • 这就是我在我的程序中的做法,我只是剪掉它,以便更容易理解我的代码
  • 别那样做。您删除了使其成为最明显答案的内容。
  • 已添加感谢您告知我

标签: php ssh cmd putty


【解决方案1】:

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

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

无论如何,没有办法让 PuTTY 或 Plink 只分离命令的输出(至少不能从命令行)。

但是你可以做的是打印一些header/trailer来区分命令输出的开始和结束,比如:

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。但这是一个完全不同的问题。

【讨论】:

  • 首先对我迟到的回复感到抱歉。在按照你所说的 Plink 尝试后,我有 2 个问题 1. 你说我不再需要使用 test.txt 文件,但是当使用实际命令而不是文件时,它会显示 plink:无法打开命令文件 2。如何在我的 PHP 脚本中运行命令时是否保存输出我得到一个空结果。
  • -m 应该已被删除。我已经更正了我的答案。
  • 感谢在控制台中运行命令时它现在可以正常工作,但我仍然没有在 PHP 脚本中打印输出。
  • 什么输出?你的意思是你根本没有输出?或者你没有得到你的命令的输出? --- 如果你只是执行$cmd = "C:\path_to_putty\plink.exe - 你会得到使用屏幕吗?
  • 在尝试了几次之后,它似乎无法正常工作,就像你说的那样尝试 $cmd = "C:\path_to_putty\plink.exe 我得到:Plink: 命令行连接实用程序版本 0.71 用法:plink [options] [user@]host [command](“host”也可以是 PuTTY 保存的会话名称)选项:-V .... 但是,当尝试使用 plink 命令重新启动时什么都没有发生了,我得到一个空白页
猜你喜欢
  • 2013-11-22
  • 2012-09-14
  • 1970-01-01
  • 2016-12-04
  • 2012-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-19
相关资源
最近更新 更多