Если каждое SSH-подключение тормозит на несколько секунд, со временем это выливается в часы потерянного времени. Особенно, если ты постоянно работаешь с серверами для автоматизации действий. В моём случае расшифровка SSH-ключа при коннекте занимала 4.6508 секунды – пока я не оптимизировал процесс, сократив его до 0.0261 секунды. Рассказываю, как именно.
Почему всё было так медленно
Я использовал SSH-ключи в OpenSSH-формате с паролем (passphrase). OpenSSH шифрует их с помощью bcrypt (или аналога KDF) с огромным числом итераций – это круто для безопасности (хотя и другие методы не менее безопасные), но ОЧЕНЬ медленно.
Когда исполнительный сервер пытался расшифровать ключ, процесс занимал 4+ секунды.
🔹 Ключ загружался постоянно
Деплой, выполнение задач, тестирование – при каждом подключении ключ снова и снова расшифровывался. Все это дико бесило и замедляло работу.
Как ускорить SSH-авторизацию?
1️⃣ Перешёл с OpenSSH на PKCS8
Главный трюк – отказаться от шифрования bcrypt внутри OpenSSH и использовать PKCS8 с PBKDF2, где можно настроить разумное количество итераций или использовать дефолтные настройки
❌ OpenSSH (bcrypt, cost=16–18) → секунды расшифровки
✅ PKCS8 (PBKDF2, 10k–20k итераций | дефолт) → миллисекунды
Публичная часть ключа всё ещё в OpenSSH-формате (для `authorized_keys`), но приватная теперь PKCS8.
2️⃣ Дополнительное шифрование AES-256
Чтобы ключ не лежал в открытом виде, сверху добавил AES-256.
Это дешёвая по вычислениям операция, но она не даёт ключу валяться в чистом виде на диске (даже если это S3).
🔸 PKCS8 (PBKDF2) → <0.02s
Общее время расшифровки < 0.03 секунды вместо 4.6508 секунд.
Итог: ускорение в 178 раз 🚀
Бенчмарк показал разницу в 17 739%. Теперь SSH-аутентификация работает в сотни раз быстрее, что значительно ускоряет деплой и управление серверами.
Отключить UseDNS и GSSAPIAuthentication в sshd_config, если задержка handshake.
Убедись, что используешь gmp/openssl/sodium, а не чистый ЯП (иначе будут тормоза)
Такая небольшая оптимизация дала огромный прирост скорости. Если у вас долго проходит авторизация – попробуйте такой подход 🥸