bashスクリプトのcgiからsshで他のマシンにアクセス出来ません

"Could not create directory '/var/www/.ssh'. Host key verification failed."

http://server/cgi-bin/getXXXX.cgi?host01+host02
の様にして以下のスクリプトにアクセスしています。

#!/bin/bash

function htwrite {
echo $* | sed "s/$/<br>/g"
};

echo "Content-type: text/html"
echo ""

echo "<html><head>"
echo "<title>getclustername</title>"
echo "</head><body>"

htwrite "$(pwd)"
htwrite "$(who)"

htwrite "args: $*"
for arg in $*
do
htwrite "$arg clusters is:"
ssh $arg getclustername 2>&1
htwrite ""
done

echo "</body></html>"
#-----おわり------
結果、ブラウザに以下の様に表示されます。
host01 clusters is:
Could not create directory '/var/www/.ssh'. Host key verification failed.
host02 clusters is:
Could not create directory '/var/www/.ssh'. Host key verification failed.

host01とhost02には公開鍵暗号でパスワード無しでログイン出来ています。
また、このスクリプトをbashプロンプトから起動するとうまくいきます。
getclusternameというのはsshのログイン先に置いてあるスクリプトで、結果を標準出力に返します。
pwdやwhoの返事はちゃんと返ってきています。

サーバーはFedora release 8 (Werewolf)とapache
クライアントはwindows/Operaです。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2008/07/10 14:09:48
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:t_shiono No.1

回答回数256ベストアンサー獲得回数22

ポイント32pt

sshコマンドに -i あるいは、-F オプションを指定して、鍵などの情報を与えてあげる必要があると思います。


neuromancer_shoさんがバッシュプロンプトから起動するとうまくいくというのは、

例えば、ユーザID:shoでログインして、いる状態で起動しています。

CGIから実行した場合は、apacheのプロセスから起動されますので、ユーザapacheやhttpdなどが起動することになります。


ユーザshoが起動した場合には、デフォルトで、/home/sho/.ssh以下に設定ファイル、及び、鍵があるという動作になります。


今回の現象は、httpdの実行しているユーザのHOMEが/var/wwwとなっているので、デフォルトの動作として、/var/www/.ssh以下を探索することになります。そのため、上記エラーとなっているかと思います。


そのため、

-f /home/sho/.ssh/config

などのオプションをつけて起動するなどすると、うまくいくのではないかと思います。

詳しくは、sshのマニュアルを見てください。


http://www.unixuser.org/~euske/doc/openssh/jman/ssh.html

id:neuromancer_sho

回答ありがとうございます。

しかし、スクリプト内で実行したwhoコマンドで表示されるユーザーは例で言うところの sho になっているのです。

そういう場合でも sho 以外のユーザで起動されている可能性があるのでしょうか?

2008/07/10 11:10:13
id:t_shiono No.2

回答回数256ベストアンサー獲得回数22

ポイント38pt

suexecか何かを利用しているのでしょうか?

ともかく、whoでshoが返ってくるとすると、実行ユーザは問題ない気がします。

すると、以下に関連質問がありましたが、環境変数が怪しい気がします。

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

ここにもありますが、HOMEを指定するとうまくいくのかもしれません。

何かの参考になれば。

id:neuromancer_sho

suexecというのは知らないので使ってないと思います。

sshを受け付ける側の/var/log/secureを見てみたら、Failed password for apache from .... となっていました。どうやらwhoで表示されるユーザとsshのユーザは違うみたいです。

HOMEを変えたら Host key verification failed. だけになりました。

何か見えてきたような???

こうなったらapache用のkeyを作ってやろうと思ったら、

#su apache

This account is currently not available.

これは/etc/passwordをいじると解決したので、apache用のkeyを/var/www/.sshに作って、受け入れ側のauthorized_keysに入れてあげたらうまくいきました。解決です。

今気付いたんですが、whoとwhoamiは違うんですね・・・・

whoamiだと"apache"とでてきました。

どうもありがとうございました。

2008/07/10 12:50:09

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

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

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

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

回答リクエストを送信したユーザーはいません