webサーバーでリクエストを受けて、apacheを動作させているnobodyユーザーで、他のサーバーにSSHで接続して、接続先のサーバーでコマンドを実行して、結果を受け取るにはどのように設定すればよいでしょうか。nobodyユーザーだとホームディレクトリがないなどで、うまく設定できていない状態です。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/10/19 13:01:34
  • 終了:2007/10/26 13:05:03

回答(3件)

id:Bookmarker No.1

しおり回答回数191ベストアンサー獲得回数342007/10/19 14:59:06

ポイント27pt

suEXEC 機能を使えば良いのではないでしょうか。

suEXEC Support - Apache HTTP Server

suEXEC 機能により、Apache ユーザは Web サーバを実行しているユーザ ID とは 異なるユーザ ID で CGI プログラムや SSI プログラムを実行することができます。CGI プログラムまたは SSI プログラムを実行する場合、通常は web サーバと同じユーザで実行されます。

id:y-kawaz No.2

y-kawaz回答回数1420ベストアンサー獲得回数2252007/10/19 15:26:00

ポイント27pt

まずサンプルです。

1.apache 権限でパスフレーズ無しの鍵を作成します。

1-1.鍵作成用ページ(keygen.php)を作成する。

<?php
system("ssh-keygen -t dsa -f key/id_dsa -N '' -q");
?>

1-2.apacheで書き込みが出来るように鍵ファイル置き場(key)を作成する。

mkdir key
chmod 777

1-3.keygen.phpにブラウザでアクセスして key/id_dsa と key/id_dsa.pub が作成されたことを確認する。

2.公開鍵(key/id_dsa.pub)を接続先サーバの ~/.ssh/autorized_keys に追加する。

2-1.sshコマンドを実行するページ(ssh.php)を作る

<?php
system('ssh -o "StrictHostKeyChecking no" -i key/id_dsa -l user1 -p 10022 host1 ls');
?>

2-2.このページにアクセスしてみて接続先で ls が実行されたら成功です。


apache に ssh を実行させるポイントは大体以下の通りです。

  • パスフレーズ無しの公開鍵認証が出来るようにしておく
  • 秘密鍵はapache権限で読めるが、それ以外のユーザでは読めない用にしておく必要がある(phpを経由してapacheに鍵を作らせる)
  • ホストキーチェックをしないようにする(-o "StrictHostKeyChecking no" オプションを付ける。初めてsshするときに「ホスト鍵をknown_hostsに追加しますか? yes/no」というやつが聞かれなくなります)

http://q.hatena.ne.jp/answer

id:y-kawaz No.3

y-kawaz回答回数1420ベストアンサー獲得回数2252007/10/19 15:48:34

ポイント26pt

↑の回答の補足ですが、suexec 環境で CGI の場合はapache権限ではなく、ユーザ権限で実行できるので秘密鍵のパーミッションとかはあまり気を遣う必要は無いと思います。

nobodyユーザーだとホームディレクトリがないなどで、うまく設定できていない

ということなので、suexecされていないCGIか、php環境などを想定して回答しました。

http://q.hatena.ne.jp/answer

id:loy

はい、まさしくPHP環境です。

2007/10/19 16:54:58

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません