У меня есть сценарий, который является локальным каталогом rsync примерно для 10 удаленных серверов. В основном он содержит список серверов и циклы, через которые каждый из них выполняет rsync. Чтобы ускорить процесс, у меня есть вилка для каждого из rsync, чтобы все 10 выполнялись параллельно. Проблема в том, что последние несколько серверов возвращаются с сообщением «ssh_exchange_identification: соединение закрыто удаленным хостом». Этого не происходит при выполнении rsync по отдельности или последовательно, и установка задержки в полсекунды между ними устраняет проблему (обычно иногда последний сервер в списке по-прежнему возвращает ошибку).
Кто-нибудь знает, почему это могло происходить? Я предполагаю, что это проблема с rysnc, а не с моим скриптом, поскольку скрипт в любом случае просто выполняет системный вызов rysnc.
Я видел эту проблему раньше. Вам нужно провернуть MaxStartups
значение на SSH-серверах, к которым вы подключаетесь. Обратите внимание, что значение по умолчанию - 10. Вы можете сделать это, отредактировав /etc/ssh/sshd_config
и перезагрузка демона SSH (надеюсь, вы управляете удаленными серверами).
Из man sshd_config
:
MaxStartups
Specifies the maximum number of concurrent unauthenticated connections to the SSH daemon. Additional connections will be dropped until authentication succeeds or the
LoginGraceTime expires for a connection. The default is 10.
Alternatively, random early drop can be enabled by specifying the three colon separated values “start:rate:full” (e.g. "10:30:60"). sshd(8) will refuse connection attempts
with a probability of “rate/100” (30%) if there are currently “start” (10) unauthenticated connections. The probability increases linearly and all connection attempts are
refused if the number of unauthenticated connections reaches “full” (60).