У меня есть скрипт bash, который копирует небольшие файлы последовательно с помощью scp
. Так что в этом скрипте есть куча scp
команд. Ключ SSH используется для аутентификации на другом сервере.
Поскольку файлы очень малы, попытки подключения по SSH происходят очень быстро и не так уж далеко в сценарии, и scp
могут зависнуть на неопределенный срок.
- Ошибок не обнаружено.
- Сетевое оборудование было исключено из уравнения, и серверы взаимодействуют в режиме реального времени в одной подсети.
rsync
Проблема также была продемонстрирована .
Если sleep
между этими вызовами scp поместить интервал в 1 секунду, скрипт будет работать плавно, без зависаний.
Где мне искать это явное ограничение скорости? Я не вижу этого ни на одном из моих других серверов...
решение1
Иногда люди настраиваютограничение скорости с помощью iptables.
OpenSSH имеет MaxStartups
опцию, которая ограничивает скорость входящих клиентов. По умолчанию (по крайней мере на моем компьютере) это 10:30:100
.
man sshd_config
В качестве альтернативы можно включить раннее случайное отбрасывание, указав три значения, разделенных двоеточием, start:rate:full (например, "10:30:60"). sshd(8) будет отклонять попытки подключения с вероятностью rate/100 (30%), если в данный момент есть start (10) неаутентифицированных подключений. Вероятность увеличивается линейно, и все попытки подключения отклоняются, если количество неаутентифицированных подключений достигает full (60).
Еще одна довольно распространенная проблема и причина задержек соединения OpenSSH связана с функцией сервера OpenSSH, которая пытается выполнить обратный поиск входящего IP-адреса при попытке соединения. Я считаю, что эта функциональность DNS нужна для совместимости с некоторыми старыми методами аутентификации, совместимыми с rhost, функциональностью, которую, как я думаю, почти никто больше не использует. В любом случае функция разрешения DNS вызовет проблемы, если DNS-резолверы плохо настроены, настроены на использование сломанного резолвера или, возможно, что-то в обратной зоне, из которой подключается клиентский IP, сломано.
В идеале ответ заключается в том, чтобы исправить DNS и убедиться, что ваш DNS всегда работает без ошибок и быстро отвечает. Но если вам не требуется разрешение DNS, то быстрое решение здесь — остановить сервер от попыток разрешения имен. Установите UseDNS no
в вашем sshd_config
.