1

execを使用して、PHPのリモートサーバーからコマンドを実行したいと思います。このような:

<? php
exec('ssh user@remote_server command');
?>

私のアカウントは、公開鍵/秘密鍵を使用してそのremote_serverへのsshにアクセスできますが、apacheにはアクセスできません。どちらのマシンにもrootアクセス権がないことに注意してください。'apache'ユーザーのSSHキーを生成するためのすべての回答には、rootアクセスが必要です。

4

5 に答える 5

4

私の推奨事項:純粋な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');
?>
于 2012-05-16T04:43:23.923 に答える
3

Webサーバープロセスは、rootではなくapacheユーザーが所有しています。

  1. Apacheユーザーがリモートサーバーへのログインの少ないパスワードを持っていることを確認してください

  2. SElinuxを無効にする必要があります。 参照

于 2016-07-29T08:42:00.497 に答える
1

私は試してみます:

$identity_file = '/home/you/.ssh/id_rsa'; // <-- replace with actual priv key
exec('ssh -i ' . $identity_file . ' user@remote_server command');

そのように認証できるかどうかを確認してください。IDファイルがApacheで読み取り可能であることを確認する必要があります。

欠点は、Apacheユーザーが秘密鍵を読み取ることができることです。つまり、Apacheユーザーと同じように実行されている他のサイトも同様に読み取ることができます。ただし、Apacheユーザーの秘密鍵を作成した場合でも、同じことが言えます。セキュリティを強化するには、suPHPまたはsuExecを使用して特定のユーザーとしてPHPを実行する方法を参照してください。

于 2012-05-10T00:41:24.943 に答える
1

これは、rootアクセスがないと悪い考えです。Apacheのユーザーがあなたの秘密鍵を確実に見ることができるようにするには、それを誰でも読めるようにする必要があります。rootがないchown www-data:www-dataと、Apacheはそれを見ることができないだけでなく、システム上のすべてのユーザーがそれを見ることができます。 。これは非常に悪い考えであるため、OpenSSHはデフォルトでは許可しません。秘密鍵に不当に開くファイルのアクセス許可がある場合、OpenSSHは実行を拒否します。

私はこれをしないことを強くお勧めします。PHPにSSHキーを使用してリモートコマンドを実行させる必要がある場合は、リンクに沿ってより安全なものを設定するために、rootアクセス権を持つ誰かが必要になります。

より安全な代替手段は、ターゲットマシン上で、定義したパスワードを含むHTTPリクエストを受け取り、事前定義されたコマンドを実行して出力を返すPHPスクリプトを作成することです。このスクリプトが安全に作成され、事前定義された1つのコマンドしか実行できない場合、攻撃者が実行できるのは、このスクリプトのパスワードが自分のパスワードと同じでない限り、同じコマンドを実行することだけです。正確に1つのコマンドである必要はなく、注意すればいくつかの引数を取ることもできます。重要な点は、リモートユーザーに任意の実行を許可しないことです。ターゲットマシン上のコマンド。実行したいコマンドが潜在的に有害ではなく、代わりに他のコマンドを実行できるようにするコーディングエラーがスクリプトに含まれていないことが確実な場合、これはそれほど悪い考えではありません。

于 2012-05-10T00:58:20.340 に答える
1

SSH2を使用します。 http://php.net/manual/en/book.ssh2.php

于 2012-05-18T05:42:41.250 に答える