我最近开始使用监视来监视我的CentOS 5.4服务器上的sshd的状态。 这工作正常,但经常monit报告sshd不再运行。 这是不正确的 – 我仍然可以通过SSHlogin到服务器,但我注意到以下内容:
service sshd restart重新启动sshd不会创buildPID文件。 sudo service sshd status报告openssh-daemon is stopped – 再次,重新启动sshd不会改变这一点,但重新启动。 sudo service sshd stop报告failed ,大概是因为缺lessPID文件。 任何想法是怎么回事?
更新
sudo netstat -lptun给出了与端口22有关的以下输出
tcp 0 0 :::22 :::* LISTEN 20735/sshd
用@Henrybuild议用这个PID来杀死进程,然后通过服务启动sshd会导致service sshd status再次通过PID来识别进程。 仍然想更好地理解这一点。
几个回答者build议的RPMvalidation表明:
sudo rpm -vV openssh openssh-server openssh-clients | grep 'S\.5' S.5....T c /etc/pam.d/sshd S.5....T c /etc/ssh/sshd_config
/etc/pam.d/sshd具有以下内容:
#%PAM-1.0 auth include system-auth account required pam_nologin.so account include system-auth password include system-auth session optional pam_keyinit.so force revoke session include system-auth #session required pam_loginuid.so
最后一行是否应该注释掉?
更新这里是@YannickGirouard脚本的输出:
$ sudo ./sshd_test Searching for the process listening on port 22... Found the following PID: 21330 Command line for PID 21330: /usr/sbin/sshd Listing process(es) relating to PID 21330: UID PID PPID C STIME TTY TIME CMD root 21330 1 0 14:04 ? 00:00:00 /usr/sbin/sshd Listing RPM information about openssh packages: Name : openssh Relocations: (not relocatable) Version : 4.3p2 Vendor: CentOS Release : 72.el5_7.5 Build Date: Tue 30 Aug 2011 12:34:14 AM BST Install Date: Sun 06 Nov 2011 12:50:57 AM GMT Build Host: builder10.centos.org Group : Applications/Internet Source RPM: openssh-4.3p2-72.el5_7.5.src.rpm Size : 745390 License: BSD Signature : DSA/SHA1, Fri 02 Sep 2011 01:13:01 AM BST, Key ID a8a447dce8562897 URL : http://www.openssh.com/portable.html Summary : The OpenSSH implementation of SSH protocol versions 1 and 2 ------------------------------------------------------ Name : openssh-clients Relocations: (not relocatable) Version : 4.3p2 Vendor: CentOS Release : 72.el5_7.5 Build Date: Tue 30 Aug 2011 12:34:14 AM BST Install Date: Sun 06 Nov 2011 12:51:04 AM GMT Build Host: builder10.centos.org Group : Applications/Internet Source RPM: openssh-4.3p2-72.el5_7.5.src.rpm Size : 871132 License: BSD Signature : DSA/SHA1, Fri 02 Sep 2011 01:13:01 AM BST, Key ID a8a447dce8562897 URL : http://www.openssh.com/portable.html Summary : The OpenSSH client applications ------------------------------------------------------ Name : openssh-server Relocations: (not relocatable) Version : 4.3p2 Vendor: CentOS Release : 72.el5_7.5 Build Date: Tue 30 Aug 2011 12:34:14 AM BST Install Date: Sun 06 Nov 2011 12:51:04 AM GMT Build Host: builder10.centos.org Group : System Environment/Daemons Source RPM: openssh-4.3p2-72.el5_7.5.src.rpm Size : 492478 License: BSD Signature : DSA/SHA1, Fri 02 Sep 2011 01:13:01 AM BST, Key ID a8a447dce8562897 URL : http://www.openssh.com/portable.html Summary : The OpenSSH server daemon ------------------------------------------------------
然而,我已经通过杀死这个过程而重新开始工作,正如下面的@Henry所build议的,所以也许我不再看到同样的事情。 如果在下次重新启动后再次看到问题,请再试一次。
更新 – 3月14日 Monit提醒我sshd已经消失了,而且我可以再次login服务器。 所以现在我可以运行脚本
$ sudo ./sshd_test Searching for the process listening on port 22... Found the following PID: 2208 Command line for PID 2208: /usr/sbin/sshd Listing process(es) relating to PID 2208: UID PID PPID C STIME TTY TIME CMD root 2208 1 0 Mar13 ? 00:00:00 /usr/sbin/sshd root 1885 2208 0 21:50 ? 00:00:00 sshd: dunx [priv] Listing RPM information about openssh packages: Name : openssh Relocations: (not relocatable) Version : 4.3p2 Vendor: CentOS Release : 72.el5_7.5 Build Date: Tue 30 Aug 2011 12:34:14 AM BST Install Date: Sun 06 Nov 2011 12:50:57 AM GMT Build Host: builder10.centos.org Group : Applications/Internet Source RPM: openssh-4.3p2-72.el5_7.5.src.rpm Size : 745390 License: BSD Signature : DSA/SHA1, Fri 02 Sep 2011 01:13:01 AM BST, Key ID a8a447dce8562897 URL : http://www.openssh.com/portable.html Summary : The OpenSSH implementation of SSH protocol versions 1 and 2 ------------------------------------------------------ Name : openssh-clients Relocations: (not relocatable) Version : 4.3p2 Vendor: CentOS Release : 72.el5_7.5 Build Date: Tue 30 Aug 2011 12:34:14 AM BST Install Date: Sun 06 Nov 2011 12:51:04 AM GMT Build Host: builder10.centos.org Group : Applications/Internet Source RPM: openssh-4.3p2-72.el5_7.5.src.rpm Size : 871132 License: BSD Signature : DSA/SHA1, Fri 02 Sep 2011 01:13:01 AM BST, Key ID a8a447dce8562897 URL : http://www.openssh.com/portable.html Summary : The OpenSSH client applications ------------------------------------------------------ Name : openssh-server Relocations: (not relocatable) Version : 4.3p2 Vendor: CentOS Release : 72.el5_7.5 Build Date: Tue 30 Aug 2011 12:34:14 AM BST Install Date: Sun 06 Nov 2011 12:51:04 AM GMT Build Host: builder10.centos.org Group : System Environment/Daemons Source RPM: openssh-4.3p2-72.el5_7.5.src.rpm Size : 492478 License: BSD Signature : DSA/SHA1, Fri 02 Sep 2011 01:13:01 AM BST, Key ID a8a447dce8562897 URL : http://www.openssh.com/portable.html Summary : The OpenSSH server daemon ------------------------------------------------------
再次,当我寻找/var/run/sshd.pid我找不到它。
$ cat /var/run/sshd.pid cat: /var/run/sshd.pid: No such file or directory $ sudo netstat -anp | grep sshd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2208/sshd $ sudo kill 2208 $ sudo service sshd start Starting sshd: [ OK ] $ cat /var/run/sshd.pid 3794 $ sudo service sshd status openssh-daemon (pid 3794) is running...
是否有可能,sshd正在重新启动,而不是由于某种原因创build一个pidfile?
我也有同样的问题。 我至less暂时固定它,通过杀死sshd进程然后启动它。
service sshd status openssh-daemon is stopped
(即使我通过SSHlogin)
rpm -vV openssh openssh-server openssh-clients | grep 'S\.5' S.5....T c /etc/ssh/sshd_config netstat -anp | grep sshd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 17501/sshd kill 17501 service sshd start service sshd status openssh-daemon (pid 3157) is running...
现在monit也很高兴。 🙂
从您所描述的内容来看,它几乎看起来像另一个进程正在接pipe端口22,而不是你的SSH请求。 在重新启动服务时收到一条消息,指出该端口已被使用,这是不正常的。 看起来像是真正的sshd服务被其他“幻影”进程所取代。 可能是因为你已经安装了两次opensshd而没有改变它所使用的端口,或者(在这里不要惊慌,这只是一种可能性)你的服务器被黑客攻击,黑客用自己的另一个守护进程replacesshd。
要查看哪个进程正在使用您的端口,请尝试以下操作:
netstat -lptun
然后查找显示以22结尾的本地地址的任何行,并查看最后一列(PID /程序名称)。 记下任何使用端口22的PID。
然后找出为该PID启动的完整命令,请执行以下操作:
cat /proc/PID/cmdline (其中PID =进程的PID)
如果它不是/ usr / sbin / sshd,(或者其他的opensshd二进制文件),你就会遇到问题!
下面是一个脚本,你可以安全地运行一些有用的信息:
#! /bin/bash echo -e "Searching for the process listening on port 22...\n" PORT22_PID=$(netstat -lptun | grep -E ":22\s" | awk '{print $7}' | awk -F/ '{print $1}' | uniq) if [ ! -n "$PORT22_PID" ]; then echo "Error: Was not able to find any process listening on port 22" exit 1 fi echo -e "Found the following PID: $PORT22_PID\n" echo -e "Command line for PID $PORT22_PID: $(cat /proc/$PORT22_PID/cmdline)\n" echo -e "Listing process(es) relating to PID $PORT22_PID:\n" echo "UID PID PPID C STIME TTY TIME CMD" ps -ef | grep -E "\s$PORT22_PID\s" echo echo -e "Listing RPM information about openssh packages:\n" RPMS=$(rpm -qa | grep openssh) for r in $RPMS; do rpm -qi $r | sed -n '/^Name/,/^Summary/p' echo -e "\n------------------------------------------------------\n" done
只需将输出粘贴到原来的问题中即可。 我已经在我自己的Centos服务器上彻底testing了这个脚本。
首先,你可以发布你的monit.conf或monit.confconfiguration文件吗? 看看是否正在写入PID文件和处理参数是有意义的。 我在CentOS 5.x上进行SSH监控的Monit节是:
check process ssh with pidfile "/var/run/sshd.pid" start program = "/sbin/service sshd start" stop program = "/sbin/service sshd stop"
在深入之前,我会仔细检查SSH守护进程的健康状况。
运行rpm -vV openssh openssh-server openssh-clients | grep 'S\.5' rpm -vV openssh openssh-server openssh-clients | grep 'S\.5'
这将检查SSH二进制文件的一致性,并根据原始RPM中安装的内容进行validation。
[root@freaky ~]# rpm -vV openssh openssh-server openssh-clients | grep 'S\.5' S.5....T c /etc/ssh/sshd_config S.5....T c /etc/ssh/ssh_config
在上面的例子中,唯一修改的文件是SSHconfiguration文件。 如果其中一个可执行文件(如/usr/sbin/sshd或/usr/bin/ssh出现在您的输出中,那么您的系统已经被入侵。 您可以select重新载入openssh openssh-server和openssh-clients软件包,并强制安装它们来覆盖潜在的糟糕的二进制文件…但这是一个更大的话题。
同时检查你的netstat信息。
[root@freaky ~]# netstat -anp | grep sshd Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 :::22 :::* LISTEN 4278/sshd
这将提供当前正在运行的sshd的PID和端口信息。