如何使用PHP和远程ssh从文本文件中获取信息?

时间:2016-01-16 09:46:53

标签: php linux bash shell ssh

我在PHP执行带有远程ssh的bash脚本并在日志上执行grep时表现非常糟糕。在Web浏览器中,我在40秒后收到输出。直接在我的本地机器上执行bash脚本(远程机器上的ssh + grep)需要8秒。我知道我无法绕过这个,所以我想出了:

创建PHP脚本,该脚本将保存到本地计算机上的文本文件中所有"变量"我需要。我们称之为" parameters.txt"。然后是其他bash脚本" reader.sh"会读到这个" parameters.txt"文件,做远程ssh和grep的所有魔术,然后将输出保存到" output.txt"。后台脚本将每2秒运行一次reader.sh

这是个好主意吗?

2 个答案:

答案 0 :(得分:0)

如果您确实需要通过SSH使用PHP,则可以使用http://phpseclib.sourceforge.net/之类的内容。他们有一个很好的ssh实现,我曾经用它来部署应用程序并配置Linux服务器(puppet取而代之)。您的代码将更清晰,易于维护。

另一个选择是,如果您正在从Linux读取日志(消息,apache,syslog等等),您可以选择使用Rsyslog(http://www.rsyslog.com/)将其集中在服务器上并在本地处理它。这对您的计算机来说更便宜,也更容易部署。

答案 1 :(得分:0)

以下是您快速完成的方法。我最近发布了一个项目,允许PHP获取真正的Bash shell并与之交互,甚至通过SSH。在此处获取:https://github.com/merlinthemagic/MTS

下载后,您只需使用以下代码:

$shell = \MTS\Factories::getDevices()->getRemoteHost('ip_address')->getShellBySsh('username', 'secretPassword');

//execute the grep command
$return1  = $shell->exeCmd("cat /full/path/to/logfile | grep \"someExpression\"");

echo $return1; //contains all the return that matched the grep expression
相关问题