Habilita o SSH simultâneo em massa para um único servidor

9

Meu objetivo é permitir que 10000 ssh s concorrentes sejam executados em um servidor único .

Para simplificar, estou ssh-ing para localhost:

for i in 'seq 1 10000'; do
    ssh localhost "echo ${i}; sleep 100"  >>./info 2>>./log &
done

sleep 100 é ter certeza de que quando o ssh 10000 começa, o primeiro ssh ainda está em conexão, então existem 10000 concorrentes ssh s.

E aqui estão os dois tipos de mensagens de erro que recebi:

1. ssh_exchange_identification: Connection closed by remote host

2. ssh_exchange_identification: read: Connection reset by peer

Eu fiz as seguintes modificações:

  1. Em /etc/security/limits.conf e /etc/security/limits.d/90-nproc.conf , defina% uvel e nofile & nproc para 65535 (esse é o valor máximo possível certo? - Atualizar: não. O valor máximo é 1048576 )
  2. Em /etc/sysctl.conf , defina kernel.pty.max = 65535
  3. Em /etc/ssh/sshd_config , defina MaxStartups 10000 .

Estas modificações me permitem executar com sucesso 1000 ssh s simultâneos em um único servidor, mas eles não funcionam para 2000 e acima de ssh .

Algumas pessoas sugeriram alterar o valor de MaxSessions (na verdade, não estou claro sobre seu uso: como a multiplexação afeta meu caso?), /proc/sys/net/core/netdev_max_backlog e /proc/sys/net/core/somaxconn , mas elas parecem não fazer diferença.

Além disso, não há erro se eles forem 10000 ssh s concorrentes para servidores diferentes (problemas ocorrem somente quando o ssh para um servidor único ) :

for i in 'seq 1 10000'; do
    j=$(( 1 + $i % 8 ))
    ssh server-${j} "echo hi; sleep 100" >info-${j} 2>log-${j} &
done

Eu tenho estado preso nisso por muito tempo.
Qualquer ajuda seria muito apreciada!

    
por Clara 03.08.2015 / 12:46

1 resposta

2

/ eu gostaria de poder comentar

sshd precisa (normalmente, mas você não especificou o (s) caso (s) de uso exato (s), etc.) alocar um pty por login, no entanto, no seu caso, ssh "echo hi; sleep 100s" NÃO aloca um pty, então não há necessidade da configuração kernel.pty.max ... a menos que você queira milhares de usuários logados em * ... para testar isso, você precisará adicionar a opção -t para seus testes, ie. ssh -t "echo hi; sleep 100s"

Voltar para o problema em questão com o error: reexec socketpair: Too many open files Testes em um Wheezy dist-upgraded para o sistema Jessie, descobri que / etc / security / limit * não altera os limites do sshd.

verifique se com cat /proc/<pid-of-sshd>/limits que no meu caso, depois de definir em /etc/security/limits.conf:    * nofile soft 65535    * nofile difícil 65535 ainda relata apenas 1024 (soft) e 4096 (hard) para os limites do sshd. A resolução parece ser forçar o ulimit -Hn 65535 & ulimit -n 65535 dentro do script /etc/init.d/ssh usando esses comandos ulimit, eu aumentei os nofiles do sshd para 65535/65535 de 1024/4096

    
por 30.08.2015 / 22:25

Tags