sshd em execução, mas nenhum arquivo PID

2

Recentemente, comecei a usar o monitor para monitorar o status do sshd no meu servidor CentOS 5.4. Isso funciona bem, mas de vez em quando os relatórios monit que o sshd não está mais sendo executado. Isso não é verdade - eu ainda sou capaz de acessar o servidor via ssh, no entanto, observe o seguinte:

  • Não há mais nenhum arquivo PID em /var/run/sshd.pid - após a reinicialização, esse arquivo existe. Depois que ele for removido, reiniciar o sshd via service sshd restart não criará o arquivo PID.
  • sudo service sshd status reports openssh-daemon is stopped - novamente, reiniciar o sshd não altera isso, mas uma reinicialização faz isso.
  • sudo service sshd stop reports failed , presumivelmente devido ao arquivo PID ausente.

Alguma ideia do que está acontecendo?

Atualizar

sudo netstat -lptun fornece a seguinte saída relacionada à porta 22

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

Eliminar o processo com este PID como sugerido por @Henry e, em seguida, iniciar o sshd por meio dos resultados do serviço em service sshd status , reconhecendo o processo pelo PID novamente. Ainda gostaria de entender isso melhor.

A verificação de RPM sugerida por alguns respondentes mostra isso:

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 tem o seguinte conteúdo:

#%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

Esta última linha deve ser comentada?

Atualizar Aqui está a saída do script do @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

------------------------------------------------------

No entanto, desde então, tenho conseguido trabalhar matando o processo e começando de novo, como sugerido por @Henry abaixo, então talvez eu não esteja mais vendo a mesma coisa. Tentarei novamente se estiver vendo o problema novamente após a próxima reinicialização.

Atualização - 14 de março Monit me alertou que o sshd havia desaparecido e, novamente, eu posso ssh no servidor. Então agora eu posso rodar o script

$ 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

------------------------------------------------------

Mais uma vez, quando procuro /var/run/sshd.pid , não o encontro.

$ 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...

É possível que o sshd esteja reiniciando e não criando um pidfile por algum motivo?

    
por dunxd 27.02.2012 / 11:15

3 respostas

3

Eu tenho o mesmo problema. Eu consertei, temporariamente, pelo menos, matando o processo sshd e depois iniciando-o.

    service sshd status
    openssh-daemon is stopped

(mesmo que eu esteja logado via 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...

E agora o monit também é feliz. :)

    
por 01.03.2012 / 22:39
2

A partir do que você está descrevendo, quase parece que outro processo está assumindo a porta 22 e responde às suas solicitações SSH. Receber uma mensagem dizendo que a porta já está em uso ao reiniciar um serviço não é normal. Parece que o serviço sshd real é morto em favor daquele outro processo "fantasma". Pode ser que você tenha instalado o opensshd duas vezes sem alterar a porta que está usando, ou (e não entre em pânico, é apenas uma possibilidade) que seu servidor foi invadido e o hacker substituiu o sshd por outro daemon.

Para ver qual processo está usando sua porta, tente isto:

netstat -lptun

Em seguida, procure por qualquer linha que mostre um endereço local que termine com: 22 e observe a última coluna (PID / nome do programa). Anote qualquer PID usando a porta 22.

Em seguida, para descobrir o comando completo iniciado para esse PID, você faz isso:

cat /proc/PID/cmdline (onde PID = o PID do processo)

Se não for / usr / sbin / sshd, (ou qualquer binário que o opensshd deva ser), você tem um problema!

Aqui está um script que você pode executar com segurança para despejar algumas informações úteis:

#! /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

Basta colar a saída em sua pergunta original e isso deve ajudar. Eu testei este script completamente no meu próprio servidor Centos.

    
por 27.02.2012 / 21:24
0

Primeiro, você pode postar seu arquivo de configuração monit.conf ou Monit? Faz sentido para ver se você está batendo o arquivo PID de gravação e os parâmetros de processo. Minha sub-rotina Monit para monitoramento de SSH no CentOS 5.x é:

    check process ssh
        with pidfile "/var/run/sshd.pid"
        start program = "/sbin/service sshd start"
        stop program = "/sbin/service sshd stop"

Antes de ficar muito profundo, eu verificaria novamente a integridade do daemon SSH.

Executar um rpm -vV openssh openssh-server openssh-clients | grep 'S\.5'

Isso verifica a consistência dos binários SSH e os verifica em relação ao que foi instalado no RPM original.

[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

No exemplo acima, os únicos arquivos modificados são arquivos de configuração SSH. Se um dos executáveis como /usr/sbin/sshd ou /usr/bin/ssh aparecer em sua saída, seu sistema foi comprometido. Você tem a opção de baixar novamente os pacotes openssh openssh-server e openssh-clients e forçá-los a sobrescrever binários potencialmente ruins ... Mas esse é um tópico maior.

Verifique também as informações do seu 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      

Isso fornecerá as informações de PID e porta do sshd atualmente em execução.

    
por 28.02.2012 / 00:00

Tags