Já tive problemas semelhantes a isso antes e eles podem ser um incômodo para rastrear. Como você forneceu muitas informações para continuar, eu vou ter que soletrar algumas coisas para verificar e também qual foi o meu problema.
Primeiro, verifique seus registros. Mais notavelmente neste caso, a saída do dmesg (este é o buffer do anel do kernel, onde ele armazena os dados do log). Isso é liberado periodicamente para um arquivo (s) em / var / log, embora dependa exatamente de seu sistema operacional. Por exemplo, a Red Hat possui um arquivo / var / log / dmesg. Você está procurando por algo que pareça incomum, especialmente relacionado ao processo assassino da OOM . Isso termina os programas quando a RAM começa a ficar cheia em uma tentativa de manter o servidor ativo e responsivo. O sshd deve estar isento disso, mas isso é específico da distribuição de como é definido. A forma moderna de especificar uma exceção OOM é dar ao sshd uma pontuação informando ao kernel como ele é precioso para o servidor como um todo (o que deve colocá-lo longe na lista de processos para matar se ocorrer uma situação crítica de RAM). Sua distro deveria ter configurado isso corretamente.
A outra coisa a verificar é que o seu servidor tem entropia suficiente com o seguinte:
cat /proc/sys/kernel/random/entropy_avail
Um valor OK está acima de aproximadamente 1000-1500. Abaixo e sua corrida baixa. Só vai até aproximadamente 4000-5000 nas minhas máquinas (estas são baseadas nas minhas observações dos meus servidores).
Eu tive problemas para fazer login em servidores onde a entropia era tão baixa (e a geração era lenta) que os aplicativos ficavam pendurados esperando que mais entropia estivesse disponível. Existe um bug infame do Debian Exim que destacou isso. O Exim usou o GNU TLS no Debian, que usava apenas / dev / random e usava massas de entropia para cada conexão. Veja aqui . Quando a entropia estava esgotada, o Exim simplesmente se pendurava. Isso também faria com que outros programas que dependessem da entropia começassem a recusar conexões também.
Como as chaves de sessão são geradas a cada sessão, o sshd precisa de uma boa fonte de números aleatórios. Embora deva estar usando / dev / urandom para coletar números pseudo-aleatórios se / dev / random estiver bloqueando, não tenho certeza se o sshd estará fazendo isso.
Esse problema pode ser bastante severo em sistemas virtuais, pois muitas das fontes de números aleatórios não são passadas para a máquina virtual. A principal fonte de entropia é a E / S de disco, mas isso normalmente não é passado para a VM. Os geradores de números aleatórios de hardware que podem estar incorporados no chipset / CPU da máquina física provavelmente também não serão passados para a máquina virtual.
Este é um bom artigo sobre o assunto.
Eu corro rngd
em segundo plano no meu servidor para alimentar / dev / random com dados de / dev / urandom com isto:
rngd -r /dev/urandom -o /dev/random
Esta não é uma ótima solução, mas é útil para manter as coisas juntas enquanto você procura por fontes de números aleatórios melhores. Estou procurando alimentar rngd
com dados de uma fonte diferente, mas ainda não tive muita chance de fazê-lo.