🖥 fail2ban банит. SSH-ключи не пускают вообще

Сегодня я выложил ролик, в котором показал, как заблокировать перебор паролей SSH через fail2ban. Бот ошибся трижды — IP в бане на час. Работает, но у этого подхода есть потолок: бот всё равно успевает попробовать три комбинации до блокировки.

🖥 fail2ban банит. SSH-ключи не пускают вообще

Есть способ закрыть саму возможность входа по паролю. Сервер просто перестанет принимать пароли и будет пускать только по криптографическому ключу.

Как настроить. Генерируем ключевую пару на своей машине:

ssh-keygen -t ed25519

Копируем публичный ключ на сервер:

ssh-copy-id user@твой_сервер

Проверяем, что вход по ключу работает, и только после этого отключаем пароли. На Ubuntu 22.04 и 24.04 строку нужно добавлять не в основной конфиг, а отдельным файлом, иначе cloud-init её перезапишет и настройка не применится:

echo "PasswordAuthentication no" | sudo tee /etc/ssh/sshd_config.d/99-disable-password.conf

sudo systemctl restart sshd

На Debian и других дистрибутивах без cloud-init достаточно прописать PasswordAuthentication no в /etc/ssh/sshd_config и перезапустить службу.

После этого даже бесконечный перебор паролей ничего не даст: метода входа по паролю на сервере больше нет. fail2ban из ролика можно не применять.

Вообще именно в комментариях к ролику часто писали, не лучше применять именно этот метод, вместо fail2ban, поэтому я решил здесь написать про SSH-ключи.

Какой подход используете на своих серверах? 🔥

11