Назад | Перейти на главную страницу

sshd работает, но нет файла PID

Недавно я начал использовать monit для отслеживания статуса sshd на моем сервере CentOS 5.4. Это нормально работает, но время от времени monit сообщает, что sshd больше не работает. Это неправда - я все еще могу войти на сервер через ssh, однако отмечу следующее:

Есть идеи, что происходит?

Обновить

sudo netstat -lptun дает следующий вывод, относящийся к порту 22

tcp        0      0 :::22      :::*    LISTEN      20735/sshd

Завершение процесса с помощью этого PID, как было предложено @Henry, а затем запуск sshd через службу, приводит к service sshd status снова распознавание процесса по PID. Хотел бы еще разобраться в этом получше.

Проверка RPM, предложенная парой респондентов, показывает следующее:

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 ниже, поэтому, возможно, я больше не вижу того же самого. Попробую еще раз, если проблема возникнет снова после следующей перезагрузки.

Обновление - 14 марта Monit предупредил меня, что sshd исчез, и я снова могу использовать ssh на сервере. Итак, теперь я могу запустить скрипт

$ 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 перезапускается и по какой-то причине не создает pidfile?

У меня та же проблема. Я исправил это, по крайней мере временно, убив процесс sshd, а затем запустив его.

    service sshd status
    openssh-daemon is stopped

(хотя я вошел в систему через ssh)

    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 тоже доволен. :)

Из того, что вы описываете, похоже, что другой процесс захватывает порт 22 и вместо этого отвечает на ваши SSH-запросы. Получение сообщения о том, что порт уже используется при перезапуске службы, не является нормальным. Похоже, что настоящая служба sshd убита в пользу этого другого «фантомного» процесса. Возможно, вы установили opensshd дважды, не меняя порт, который он использует, или (и не паникуйте, это всего лишь возможность) ваш сервер был взломан, и хакер заменил sshd другим своим собственным демоном.

Чтобы узнать, какой процесс использует ваш порт, попробуйте следующее:

netstat -lptun

Затем найдите любую строку, показывающую локальный адрес, заканчивающийся на: 22, и посмотрите на последний столбец (PID / Имя программы). Запишите любой PID, использующий порт 22.

Затем, чтобы узнать полную команду, запущенную для этого 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.

Во-первых, можете ли вы опубликовать свой monit.conf или файл конфигурации Monit? Имеет смысл посмотреть, попадаете ли вы в файл PID записи и параметры процесса. Моя статья Monit для мониторинга SSH в CentOS 5.x:

    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'

Это проверяет согласованность двоичных файлов SSH и сравнивает их с тем, что было установлено в исходном RPM.

[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

В приведенном выше примере единственными измененными файлами являются файлы конфигурации SSH. Если один из исполняемых файлов, например /usr/sbin/sshd или /usr/bin/ssh появляется в вашем выводе, ваша система была взломана. У вас есть возможность повторно загрузить 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      

Это предоставит информацию о PID и порте запущенного в данный момент sshd.