使用PHP和Bash通过SSH登录到外部服务器



我正在尝试设置一个集中服务器,负责监视我的其他服务器。该集中式服务器需要能够收集关于特定服务器(例如df -hservice httpd status)的特定信息/度量;但如果需要,它还需要能够重新启动Apache。

如果不是Apache重新启动,我可以编写一个侦听脚本,提供一种方法,在不需要SSH的情况下为集中式服务器提供所需的数据。但因为我也希望它能够重新启动Apache,所以它需要能够通过PHP和Bash的组合登录并启动脚本。

目前,我正在使用PHP的shell_exec来执行这个(非常简单)Bash脚本:

#!/bin/sh
ssh -i /path/to/keyFile.pem ec2-user@x.x.x.x;

我正在通过一个私有IP访问外部服务器(它是一个EC2实例)。如果我启动这个脚本,我可以毫无问题地登录——然而,当我想要发回上面列出的命令的输出时,问题就来了。

在Bash脚本中,如何在SSHing之后将类似df -h的命令输出到另一台服务器?这可能吗?

SSH有一个PECL扩展。

除此之外,您可能希望使用exec()&$output参数来获取输出:

$output = array();
exec('bash myscript.sh', $output);
print_r($output);

或者使用输出重定向

$output = '/path/to/output.txt';
exec("bash myscript.sh > $output");
if( file_exists($output) && is_readable($output) ) {
$mydata = file_get_contents($output);
}

当然,这一切都是假设你的剧本看起来像杰伦的答案。

您可以使用:

ssh -i /path/to/keyFile.pem ec2-user@x.x.x.x 'df -h'

或用于多个命令:

ssh -i /path/to/keyFile.pem ec2-user@x.x.x.x 'ls -al ; df -h'

这在命令行中有效,但我没有通过php的exec尝试过(老实说,在亚马逊上也没有…)

如果你在做ssh,我建议你使用phpseclib,一个纯PHP ssh实现。它比PECL SSH扩展更便携,也更可靠。

相关内容

  • 没有找到相关文章

最新更新