0

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

如果不是为了重启 Apache,我可以编写一个监听脚本来提供一种方法,让集中式服务器无需 SSH 即可获得所需的数据。但因为我也希望它能够重启 Apache,所以它需要能够通过 PHP 和 Bash 的组合登录和启动脚本。

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

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

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

在 Bash 脚本中,如何df -h在 SSH 连接到另一台服务器后输出命令?这可能吗?

4

3 回答 3

1

你可以使用:

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(老实说,在亚马逊上也没有......)。

于 2012-12-05T17:43:01.823 回答
1

SSH有一个PECL 扩展

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

$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);
}

而且,当然,这一切都假设您的脚本看起来像 jeroen 在他的回答中的内容。

于 2012-12-05T17:59:49.243 回答
0

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

于 2012-12-05T23:00:44.043 回答