2012-05-10 1 views
1

私はexecを使って私のPHPのリモートサーバからいくつかのコマンドを実行したいと思います。このように:apacheにsshをさせる方法

<? php 
exec('ssh [email protected]_server command'); 
?> 

マイアカウントは、公開鍵/秘密鍵ではなく、ApacheでそのREMOTE_SERVERへのsshへのアクセス権を持っています。どちらのマシンにもrootアクセス権がないことに注意してください。 Generating SSH keys for 'apache' userのすべての回答には、root権限が必要です。

答えて

4

私の推奨:phpseclib, a pure PHP SSH implementationを使用してください。例えば。

<?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'); 
?> 
1

私がしようとするだろう:

$identity_file = '/home/you/.ssh/id_rsa'; // <-- replace with actual priv key 
exec('ssh -i ' . $identity_file . ' [email protected]_server command'); 
を、あなたがそのように認証できるかどうかを確認します。アイデンティティファイルがApacheによって読み込み可能であることを確認する必要があります。

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

+0

動作しません。私は、アイデンティティファイルをApacheで読み取り可能にする必要があります。つまり、他の人(r + o)で読むことを意味します。どうやらsshはあまりにも開いているファイルモードが好きではありません! –

0

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

私はこれに反対することを強く推奨します。 PHPに本当にSSH鍵でリモートコマンドを実行させる必要がある場合は、リンクの行に沿って、より安全なものを設定するためにroot権限を持つ人が必要になります。

さらに安全な方法は、定義したパスワードを含むHTTP要求を受け取り、あらかじめ定義されたコマンドを実行して出力を返すPHPスクリプトをターゲットマシンに書き込むことです。このスクリプトが安全に書かれ、あらかじめ定義された1つのコマンドしか実行できない場合、このスクリプトのパスワードが自分のパスワードと同じでない限り、攻撃者はあなたと同じコマンドを実行します。重要なのは、リモートユーザが任意のコマンドをターゲットマシン上で実行することを許可していないということです。実行可能にしたいコマンドが潜在的に有害ではなく、スクリプトに他のコマンドを実行できるようにするコーディングエラーが含まれていないことが確かであれば、これはあまり良い考えではありません。

3

Webサーバープロセスはroot以外のApacheユーザーが所有しています。

  1. は、Apacheユーザーが

  2. SE Linuxは無効にする必要があり、リモート・サーバへのパスワードレスログインを持っていることを確認します。 Refer

関連する問題