0

他のサーバーの監視を担当する集中型サーバーをセットアップしようとしています。df -hこの集中型サーバーは、特定のサーバー(およびなど)に関する特定の情報/メトリックを収集できる必要がありますservice 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インスタンス)にアクセスしています。このスクリプトを起動すると、問題なくログインできます。ただし、上記のようなコマンドの出力を送り返したい場合は、問題が発生します。

df -hBashスクリプトで、別のサーバーに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(正直に言うとAmazonでも...)。

于 2012-12-05T17:43:01.823 に答える
1

SSH用のPECL拡張機能があります。

それ以外の場合は、の&$outputパラメーターを使用しexec()て出力を取得することをお勧めします。

$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を実行している場合は、純粋なPHPSSH実装であるphpseclibをお勧めします。PECL SSH拡張機能よりもはるかに移植性が高く、信頼性も高くなっています。

于 2012-12-05T23:00:44.043 に答える