sshd が停止、PID ファイルない問題の解決

症状

monit が一時間ごと位にsshdが止まっているというアラートメールを出すようになった。
プロセスがなくなったので、再起動したが、何回も失敗するので、unmonitor したというメールだ。

しかし、sshは繋がるし、monitのメールはまだ来る

暫定の結論

不明。
iptables??

/etc/sysconfig/network の
NETWORKING_IPV6 を yes から no へ変更。




iptables が怪しいかもと疑い中。


現象

  • sshd を再起動しようとしたが、ポートを使っているプログラムがあるので、再起動できず
  • /var/run/sshd.pid が作成されない
  • /var/run/sshd.pid がないので、monit が sshd が起動していないと勘違いする
  • だけど、/usr/bin/sshd のプロセスは存在するので、サーバに ssh はできる

なぜ、/var/run/sshd.pid が突然なくなるのかは不明

調査

  • /var/run/sshd.pid が存在しない
  • /etc/init.d/sshd status すると以下のエラーがでる。

openssh-daemon は停止しています

  • /var/log/secure を見ると

Dec 3 14:37:14 host sshd[16918]: error: Bind to port 2222 on 0.0.0.0 failed: Address already in use.
Dec 3 14:37:14 host sshd[16918]: fatal: Cannot bind any address.

一時対策


ここで、プロセスがあるのにpidがないパターンかと思い、以下を実行

  • ps aux | grep sshd して、プロセスをKILLして、/etc/init.d/sshd start
  • /var/run/sshd.pid が復活したのを確認
  • /var/log/secure に以下のログが出た

Dec 3 14:44:57 host sshd[17025]: Server listening on 0.0.0.0 port 2222.

対策1: 効果なし

tcpwrapper の問題ではなかった模様。
/etc/hosts.allow に以下を追加で解決はしなかった ( id:think-t さんより)

sshd: 127.0.0.1

上記、試したが、再度発生。

set log /var/log/monit.log して再起動する。

現在

ipv6 off で様子見。

参考URL

SSHログインする際の・・・
http://kajuhome.com/patio_thread/1799.shtml