tl; dr Исправить конфигурацию DNS-распознавателя на сервере. (Обходной путь - отключить обратный поиск в SSHD, но лучше исправить то, что сломано)
Оригинальный ответ
У кого-нибудь есть идеи, почему это может быть?
Не совсем, но вот анекдот, который может помочь:
В прошлом, с другим протоколом, когда установление соединения занимало необычно много времени, я обнаружил, что одной из причин является тайм-аут DNS, поскольку сервер пытается найти имя IP-адреса, чтобы он мог записать имя клиента в свои журналы , Если ваш IP-адрес клиента не известен локально службе DNS и DNS не настроен должным образом, то сервер может долго ждать истечения времени ожидания DNS.
Способ поиска такого эффекта заключается в том, чтобы запускать анализаторы сети, сначала на клиенте, но и на сервере, а затем вы можете увидеть некоторый сетевой трафик, связанный с соединением, для получения ответа которого требуется много времени, или который не получает ответа (вы можете увидеть повторы)
tcpdump и wireshark хороши.
Обновление 1
У клиента с задержкой подключения
На сервере
- посмотрите имя клиента
- проверьте в
/etc/resolv.conf
адрес первого DNS-сервера имен
- введите
dig -x 192.168.n.m @nameserver
или host 192.168.n.m server
где 192.168.nm заменяется действительным IP-адресом клиента, а nameserver является IP-адресом сервера имен.
- повторите для других серверов имен, перечисленных в
/etc/resolv.conf
сервер должен получить ответ в миллисекундах. При неправильной настройке DNS время ожидания может занять несколько секунд.
хороший конфиг
# time host 192.168.3.4
Host 4.3.168.192.in-addr.arpa. not found: 3(NXDOMAIN)
real 0m0.130s
user 0m0.000s
sys 0m0.020s
плохой конфиг
# echo nameserver 1.2.3.4 > /etc/resolv.conf
# time host 192.168.3.4
;; connection timed out; no servers could be reached
real 0m10.010s
user 0m0.000s
sys 0m0.010s
Обратите внимание на 10-секундную задержку. Это означает, что любой службе SSH, которая хочет иметь имена клиентов в своих журналах, потребуется 10 секунд, чтобы установить соединение SSH.
Обновление 2
Оказывается, этот вопрос (вероятно) является точной копией вопроса. Почему запрос пароля вводится навсегда, когда я захожу по SSH на сервер Ubuntu 9.05?
Решение
Исправьте конфигурацию DNS-преобразователя на сервере.