Сонный SSH: устраняем задержки на этапе handshake
Привет, Хабр!Меня зовут Андрей Бирюков. Я — независимый эксперт в области ИТ и ИБ, преподаю в учебных центрах и пишу статьи и книги.Думаю, многим администраторам знакома ситуация, когда сеть работает (в смысле нормально работает), пинг до сервера летает, ключи на месте, но при этом ssh user@host упорно висит десять, двадцать, а то и тридцать секунд, прежде чем показать приглашение.Если при выполнении интерактивных задач это просто раздражает, то в продуктиве это становится настоящей проблемой.
Так, Ansible‑плейбуки упираются в таймауты, CI‑пайплайны «залипают» на этапе деплоя, а дежурный, пытающийся зайти на упавший сервер, теряет драгоценные минуты.Тезис сегодняшней статьи довольно простой и заключается в том, что в подавляющем большинстве случаев виноваты два параметра: GSSAPIAuthentication на стороне клиента и UseDNS на стороне сервера.Но чтобы это доказать, а не угадать, нужна методичная диагностика, и далее в этой статье представлен воспроизводимый алгоритм, позволяющий найти «висящую» стадию handshake, подтвердить гипотезу и исправить проблему, не сломав при этом то, что работает.Для начала давайте разберёмся с тем, как устроен SSH‑handshake и где он может зависать.
habr.com