Monitorar a transmissão de dados SSH e fechar a conexão se não houver fluxo de dados

2

Para nossa transmissão de arquivos e armazenamento manual, temos um servidor RHEL simples no qual todos os outros clientes Linux estão se conectando por SSH.

Sempre que um cliente quiser acessar / armazenar dados, eles se conectarão ao servidor via nautilus e a conexão permanecerá estabelecida mesmo se a transmissão de dados cessar, até que seja desmontada manualmente OU o cliente desligue o sistema.

Quando eu monitorei o uso da CPU no servidor, a maior parte do uso da CPU é devido a essas conexões estabelecidas.

[root@server]# top

top - 11:22:13 up  2:36,  6 users,  load average: 2.79, 2.19, 1.90

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                                                         
17247 share     20   0 55640 1924  972 S 26.7  0.1   7:36.72 sftp-server                                                                                                                                                                     
17900 share     20   0 55640 1932  972 S 17.5  0.1  10:16.45 sftp-server                                                                                                                                                                     
26152 share     20   0 55596 1872  972 S 17.5  0.1   8:12.04 sftp-server                                                                                                                                                                     
17487 share     20   0 55636 1864  972 R 15.5  0.1   9:58.56 sftp-server                                                                                                                                                                     
 2852 root      20   0  195m  55m 7872 R 13.8  2.7  17:01.72 X                                                                                                                                                                               
11768 share     20   0 55560 1684  832 S  8.9  0.1   3:12.00 sftp-server                                                                                                                                                                     
17486 share     20   0 98172 1884  784 R  8.2  0.1   4:48.35 sshd                                                                                                                                                                            
26151 share     20   0 98236 1872  784 S  7.9  0.1   4:03.29 sshd                                                                                                                                                                            
17899 share     20   0 98204 1916  784 S  7.2  0.1   5:00.17 sshd                                                                                                                                                                            
12569 tejas     20   0  322m  11m 7808 S  5.9  0.6   0:28.12 gnome-system-mo                                                                                                                                                                 
17246 share     20   0 98204 1840  784 S  5.9  0.1   3:33.18 sshd                                                                                                                                                                            
11767 share     20   0 98008 1716  772 S  4.3  0.1   1:28.73 sshd                                                                                                                                                                            
15168 tejas     20   0  989m  64m  18m S  0.7  3.2   0:01.31 chrome                                                                                                                                                                          
 4077 tejas     20   0  109m 9312 5584 S  0.3  0.5  24:26.08 App                                                                                                                                                                             
11360 tejas     20   0  304m  10m 5144 S  0.3  0.5   0:05.23 gnome-terminal                                                                                                                                                                  
14236 root      20   0 15168 1380  928 R  0.3  0.1   0:00.36 top                                                                                                                                                                             
    1 root      20   0 19324 1056  844 S  0.0  0.1   0:00.67 init                                                                                                                                                                            
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd                                                                                                                                                                        

Portanto, estou procurando uma maneira automática de desmontar essa conexão ssh se nenhum dado estiver fluindo, digamos, por 10 minutos, ou qualquer outra idéia para minimizar esse uso da CPU.
EDIT: Após o comentário do slm, can you explain how they're connecting from Nautilus?
Veja como os clientes normalmente se conectam ao servidor pelo SSH.

  • Insira os campos obrigatórios e insira a senha:

  • Transferir / criar arquivo / s.

  • Aguarde30minapósfecharodiretório.
  • Aindamostrandoaconexão...

    
por Tejas 17.04.2014 / 08:14

1 resposta

2

Método # 1 - Usando timeouts via SSHD / SFTPD

Se as conexões forem por SSH, você pode definir essas configurações no lado do SSHD no arquivo de configuração /etc/ssh/sshd_config .

ClientAliveInterval 30
ClientAliveCountMax 5

Onde essas configurações têm efeito:

  • ClientAliveInterval : Define um intervalo de tempo limite em segundos (30) após o qual, se nenhum dado tiver sido recebido do cliente, o sshd enviará uma mensagem pelo canal criptografado para solicitar uma resposta do cliente. O padrão é 0, indicando que essas mensagens não serão enviadas ao cliente. Esta opção aplica-se apenas à versão 2 do protocolo.

  • ClientAliveCountMax : Define o número de mensagens ativas do cliente (5) que podem ser enviadas sem que o sshd receba nenhuma mensagem do cliente. Se esse limite for atingido enquanto as mensagens do cliente ativo estiverem sendo enviadas, o sshd desconectará o cliente, encerrando a sessão.

Para obter 10 minutos, você precisará ajustar os horários de acordo, talvez assim:

ClientAliveInterval 120
ClientAliveCountMax 5

Método # 2 - Usando o cortador

Se os métodos acima não funcionarem, é perfeitamente possível que o cliente esteja fazendo uso de um keep-alive que esteja artificialmente sustentando a conexão com tráfego baixo. Se esta é a sua situação, então você está limitado a quais ações você pode tomar para desconectar essas conexões inativas.

Um método seria desenvolver um cronjob que vigiaria conexões que ficaram inativas por um determinado período de tempo, digamos, 10 minutos em seu cenário.

Quando esse script detectar uma dessas conexões, você poderá usar um comando como cutter para informar ao cliente que ele se desconecte, contra sua vontade.

$ cutter <ip> <port>

Exemplo

$ cutter 192.168.1.20 22

NOTA: O Cutter deve estar na maioria dos repositórios das principais distribuições. Eu pude instalá-lo no Fedora / CentOS / RHEL assim como no Debian / Ubuntu desta maneira.

Depurando as conexões

O @Gilles trouxe um excelente ponto nos comentários sob o seu Q que conexões ociosas realmente não deveriam estar causando nenhuma carga de CPU. O fato de que todos esses sftp-server processos estão causando o que eu consideraria é que uma carga significativa (20-30%) em top parece indicar que algo está acontecendo.

Para começar, usaria strace e conecte-se a um dos processos sftp-server para ver o que está acontecendo. Por exemplo, para conectar-se ao PID 17247:

$ sudo strace -p 17247

Veja se está realmente fazendo alguma coisa. Realmente não deveria ser. Você também pode usar tcpdump ou wireshark para monitorar o tráfego de rede indo e voltando entre o Nautilus e o sftp-server .

Referências

por 17.04.2014 / 08:41