Генерация SSH-ключей
Используйте алгоритм Ed25519 — он быстрее и безопаснее RSA:
ssh-keygen -t ed25519 -C "your@email.com"
Вам предложат выбрать путь для ключа (по умолчанию
~/.ssh/id_ed25519) и задать passphrase. Passphrase добавляет дополнительный уровень защиты: даже если кто-то получит доступ к файлу ключа, без пароля он бесполезен. Для нескольких серверов удобно создавать именованные ключи:ssh-keygen -t ed25519 -f ~/.ssh/vdsok_key
Копирование ключа на сервер
Проще всего использовать утилиту
ssh-copy-id:ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server-ip
Она автоматически добавит ваш публичный ключ в файл
~/.ssh/authorized_keys на сервере. Если ssh-copy-id недоступна (например, на Windows без WSL), скопируйте содержимое файла .pub вручную. На сервере добавьте его в ~/.ssh/authorized_keys, убедитесь, что права корректны:chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
Отключение авторизации по паролю
После того как ключ настроен и вы убедились, что можете войти без пароля, отключите парольную авторизацию. Откройте
/etc/ssh/sshd_config и установите:PasswordAuthentication no PubkeyAuthentication yes PermitRootLogin no
Перезапустите SSH:
sudo systemctl restart sshd
Важно: не закрывайте текущую SSH-сессию, пока не проверите вход в новом окне терминала — если что-то пошло не так, вы сможете откатить изменения.
Смена стандартного порта
Порт 22 — первая цель ботов-сканеров. Смена порта не делает сервер неуязвимым, но резко снижает количество мусорных попыток входа. В
/etc/ssh/sshd_config измените Port 22 на любой свободный порт выше 1024, например Port 2222. Не забудьте открыть новый порт в файрволе до перезапуска SSH:sudo ufw allow 2222/tcp
После перезапуска SSH подключайтесь через:
ssh -p 2222 user@server-ip
Убедитесь, что старый порт 22 больше не используется и можете закрыть его в файрволе.
Алиасы в SSH Config
Создайте или отредактируйте файл
~/.ssh/config, чтобы не вводить полную команду каждый раз:Host myserver HostName 185.x.x.x User admin Port 2222 IdentityFile ~/.ssh/vdsok_key
Теперь для подключения достаточно написать:
ssh myserver
Можно добавить несколько хостов, использовать wildcard-правила и задать общие настройки (например,
ServerAliveInterval 60 для всех подключений). Это особенно удобно, если вы работаете с десятком серверов — не нужно помнить IP и порты.Защита с помощью Fail2Ban
Fail2Ban мониторит логи SSH и блокирует IP-адреса после нескольких неудачных попыток входа.
sudo apt install fail2ban
Создайте файл
/etc/fail2ban/jail.local:[sshd] enabled = true maxretry = 3 bantime = 3600 findtime = 600
Запустите и проверьте:
sudo systemctl enable --now fail2ban sudo fail2ban-client status sshd
В связке со сменой порта и ключевой авторизацией Fail2Ban практически исключает brute-force атаки.