"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です。
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のマニュアルを見てください。
suexecか何かを利用しているのでしょうか?
ともかく、whoでshoが返ってくるとすると、実行ユーザは問題ない気がします。
すると、以下に関連質問がありましたが、環境変数が怪しい気がします。
http://q.hatena.ne.jp/1195312726
ここにもありますが、HOMEを指定するとうまくいくのかもしれません。
何かの参考になれば。
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"とでてきました。
どうもありがとうございました。
回答ありがとうございます。
しかし、スクリプト内で実行したwhoコマンドで表示されるユーザーは例で言うところの sho になっているのです。
そういう場合でも sho 以外のユーザで起動されている可能性があるのでしょうか?