5

この質問が以前にさまざまな方法で尋ねられたことは知っていますが、なぜこれを機能させることができないのか、まだ頭を悩ませています。

まず、2 台の SLES サーバーをセットアップしました。これらはサーバー A とサーバー B で、どちらも専用チームのみがアクセスする小規模なプライベート ネットワークで実行されています。

サーバー A は、Apache、PHP、MYSQL、および ssh を実行している Web サーバーとして構成されており、これらはすべて問題なく実行されています。

サーバー B は、ssh もインストールおよびアクティブ化された状態で単純なタスクを実行するために使用されます。

サーバー A で rsa キーを作成し、それをサーバー B にインストールしました。これをコマンド ラインで実行すると、パスワードを要求することなくすぐにログインできます。サーバーAのrootアカウントとnobodyアカウントの両方に対してこのプロセスを繰り返しました.

次のようなPHPページをサーバーAに追加しました。

<?php
shell_exec('ssh root@192.162.0.5 ./StartTest.sh');

header("Location: archive.php?page=home"); 
?>

しかし、実行すると、フォルダーが作成されません。これをコマンドラインから実行すると、ルートとnobodyアカウントの両方で機能します(両方だと思います。現在、cliのnobodyアカウントでこれを試したかどうかは思い出せません)。root グループに nobody アカウントを追加するところまで行きましたが、それでも喜びはありません。

ここで何かを見逃しましたか。私がやりたいのは、サーバー A からサーバー B に php & ssh 経由で接続して、1 つのコマンドを実行し、Web サイトの別のページにリダイレクトすることだけです。

私のパラセタモールの在庫が少なくなっているので、どんな助けでもありがたいです.

4

3 に答える 3

9

GeorgeCumminsが話す組み込みのSSHサポートは存在しません。これはPHPの拡張機能であり、デフォルトでは含まれていません。個別にコンパイルする必要があり、セットアップ/使用が難しいことで有名です。私の推奨は、純粋なPHPSSH実装であるphpseclibを使用することです。

<?php
include('Net/SSH2.php');

$ssh = new Net_SSH2('www.domain.tld');
if (!$ssh->login('username', 'password')) {
    exit('Login Failed');
}

echo $ssh->exec('pwd');
echo $ssh->exec('ls -la');
?>
于 2011-10-13T03:34:23.270 に答える
2

あなたは「これを PHP ページに追加しました」と言ったので、スタンドアロン スクリプトとしてではなく、Web サーバー経由でこのスクリプトを実行していると仮定します。

そのため、スクリプトは予期したディレクトリから実行されていない可能性があります。sshスクリプトがバイナリとスクリプトを見つけられるようにするには、(相対パスではなく) 絶対パスを使用する必要があります。

shell_exec('/path/to/ssh root@192.162.0.5 /home/yourdirectory/scripts/StartTest.sh');

また、Web サーバー ユーザーが ssh および StartTest.sh スクリプトを実行する権限を持っていることを確認する必要があります。

于 2011-10-12T18:41:10.820 に答える