sshd が停止、PID ファイルない問題の解決
症状
monit が一時間ごと位にsshdが止まっているというアラートメールを出すようになった。
プロセスがなくなったので、再起動したが、何回も失敗するので、unmonitor したというメールだ。
しかし、sshは繋がるし、monitのメールはまだ来る
現象
- sshd を再起動しようとしたが、ポートを使っているプログラムがあるので、再起動できず
- /var/run/sshd.pid が作成されない
- /var/run/sshd.pid がないので、monit が sshd が起動していないと勘違いする
- だけど、/usr/bin/sshd のプロセスは存在するので、サーバに ssh はできる
なぜ、/var/run/sshd.pid が突然なくなるのかは不明
調査
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 して再起動する。
参考URL
2013-06-15 - think-tの晴耕雨読
http://d.hatena.ne.jp/think-t/20130615
centos - sshd running but no PID file - Server Fault
http://serverfault.com/questions/364064/sshd-running-but-no-pid-file