Если ваш SSH-порт открыт для всего интернета без ограничений по IP-адресам и разрешена аутентификация по паролю, будьте готовы к постоянной волне брутфорс-атак: боты перебирают популярные логины и пароли 24/7, создавая нагрузку на сервер и засоряя логи. Отключив вход по паролю и оставив только аутентификацию по SSH-ключу, вы резко снижаете эту нагрузку — подбирать криптографические ключи злоумышленникам нецелесообразно, и атаки просто прекращаются. Поэтому первый шаг к защите сервера — переход на ключи.
Чтобы безопасно подключаться к удалённому серверу, лучше всего использовать аутентификацию по ключу вместо пароля. Для этого сгенерируем себе современный SSH-ключ на основе алгоритма Ed25519:
ssh-keygen -t ed25519 -C "комментарий (обычно ваш мэйл)"
Флаг -C добавляет комментарий к публичному ключу — это удобно, когда у вас несколько ключей. Обычно туда пишут email или название устройства (например, «laptop-home» или «work-mac»). Комментарий никак не влияет на безопасность, но помогает понять, для чего предназначен ключ, особенно при просмотре файла authorized_keys на сервере.
При создании ключа система предложит указать:
- Путь для сохранения — по умолчанию это ~/.ssh/id_ed25519. Если оставить как есть, SSH будет автоматически использовать этот ключ при подключении к серверам.
- Passphrase — парольную фразу для защиты самого ключа. Рекомендуется её задать: даже если кто-то получит доступ к вашему приватному ключу, без passphrase он не сможет его использовать. При каждом подключении (или при первом использовании в сессии, если используется ssh-agent) будет запрашиваться этот пароль.
Алгоритм Ed25519 считается одним из самых надёжных на сегодняшний день: он быстрее, короче и безопаснее классических RSA-ключей длиной 2048 или даже 4096 бит.
Теперь нужно передать публичную часть ключа на сервер. Это делается одной простой командой:
ssh-copy-id имя_пользователя_на_сервере@ip_сервера
Важные моменты при выполнении этой команды:
- При первом подключении к серверу вы увидите предупреждение с отпечатком (fingerprint) хоста. Внимательно проверьте его! (Читайте статью "SSH. Получить отпечаток ключа сервера по ip") Это защита от MITM-атак («человек посередине»). Если вы подключаетесь к своему VPS впервые, сравните отпечаток с тем, что предоставляет ваш хостинг (иногда он указан в панели управления).
- Команда
ssh-copy-id
автоматически добавит ваш публичный ключ в файл
~/.ssh/authorized_keys
на сервере с правильными правами доступа.
После этого подключайтесь к серверу как обычно:
ssh имя_пользователя_на_сервере@ip_сервера
Если вы указали passphrase при создании ключа — введите его. Если нет — вход произойдёт сразу, без запроса пароля от учётной записи.