В моем приложении у меня два сервера (частный и внешний), и есть необходимость, чтобы частный сервер запускал скрипт на внешнем сервере.
Используя ssh, я пытаюсь проверить пределы от количества подключений, которые он будет удерживать:
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
Внешний сервер (2-ядерный процессор, 4 ГБ оперативной памяти) позволяет поддерживать входящие соединения, когда они имеют скорость около 16 / сек. Что-то быстрее, чем у него, возникают проблемы с подключением, а загрузка cpu получает от крыши (сумма задач и количество процессов зомби начинают накапливаться. Однако использование памяти кажется низким).
Сообщение об ошибке, которое мы видим на частный сервер через несколько секунд высокочастотных соединений
ssh_exchange_identification: Connection closed by remote host
работает с тем же тестовым скриптом на внешнем сервере, мы не видим проблемы с этой скоростью (загрузка процессора составляет около 7%, никакие зомби).
Предполагая, что это проблема ssh, поэтому мы добавили их в конфигурационный файл ssh и перезапустили службу ssh, но это не помогло:
MaxStartups 20:50:100
MaxSessions 100
Как я уже сказал, я попытался использовать ControlMaster. Вот что я сделал:
Добавил это в ~ / .ssh / config на личном сервере:
Host <external_host_ip>
ControlMaster auto
ControlPath ~/.ssh/cm_socket/%r@%h:%p
ControlPersist 600
Создал первое соединение:
ssh -M -S /home/user/.ssh/cm_socket/user@host_ip:22 -i ~/key.pem user@host_ip
Я проверил, и что-то произошло в папке cm_socket:
$ ll ~/.ssh/cm_socket/
srw------- 1 user user 0 Oct 18 18:10 user@host_ip:22=
, но когда я попытался выполнить последующий ssh без ключа, это не сработало:
[ f7]Есть ли способ увеличить пропускную способность, которую можно выполнить с помощью этой настройки?