No meu aplicativo eu tenho dois servidores (privados e externos) e há uma necessidade de o servidor privado executar um script no servidor externo.
Usando o ssh, estou tentando testar os limites de quantas conexões ele manterá:
while (1)
foreach k (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 )
ssh -i /path/to/key user@host "ls;sleep 0.3" &
sleep 0.06 # <=16.6 times/sec
end
end
O servidor externo (CPU de 2 núcleos, 4 GB de RAM) consegue manter as conexões de entrada quando estão a uma taxa de aproximadamente 16 / seg. Qualquer coisa mais rápida do que isso, ela tem problemas de conexão e a carga da CPU é superada (o total de tarefas e a quantidade de processos de zumbis começam a se acumular. Entretanto, o uso da memória parece baixo).
A mensagem de erro que vemos no servidor privado após alguns segundos de conexões de alta frequência é
ssh_exchange_identification: Connection closed by remote host
executando o mesmo script de teste no servidor externo, não vemos um problema com essa taxa (a carga da CPU é de aproximadamente 7%, não há zumbis).
Assumindo que é um problema ssh, então adicionamos estes no arquivo de configuração ssh e reiniciámos o serviço ssh, mas isso não ajudou:
MaxStartups 20:50:100
MaxSessions 100
UPDATE
Como sugerido, tentei usar o ControlMaster. Aqui está o que eu fiz:
Adicionou isto ao ~ / .ssh / config no servidor privado:
Host <external_host_ip>
ControlMaster auto
ControlPath ~/.ssh/cm_socket/%r@%h:%p
ControlPersist 600
Criada a primeira conexão:
ssh -M -S /home/user/.ssh/cm_socket/user@host_ip:22 -i ~/key.pem user@host_ip
Eu verifiquei e algo aconteceu na pasta 'cm_socket':
$ ll ~/.ssh/cm_socket/
srw------- 1 user user 0 Oct 18 18:10 user@host_ip:22=
mas quando tentei fazer um ssh subseqüente sem a chave, não funcionou:
$ ssh -M -S /home/user/.ssh/cm_socket/user@host_ip:22 user@host_ip
Permission denied (publickey).
Existe uma maneira de aumentar a taxa de transferência que pode ser manipulada por essa configuração?