Короткий ответ: SSH (Secure Shell) — это протокол для зашифрованного удалённого доступа к серверу через командную строку: вы подключаетесь по его IP-адресу, вводите логин (обычно по ключу, не по паролю) и получаете терминал, как если бы сидели перед этой машиной. Порт 22 на публичном IP начинают брутфорсить в первые же минуты после того, как сервер выходит в сеть. Экзотика для защиты не нужна — вход только по ключу плюс ограничитель частоты попыток снимает практически весь риск. Дальше — практическая настройка по шагам.
Подключение по SSH
Простейшее подключение — имя пользователя, адрес сервера и, если нужно, нестандартный порт или конкретный ключ:
ssh user@203.0.113.10 # обычное подключение
ssh -p 2222 user@203.0.113.10 # сервер слушает не порт 22
ssh -i ~/.ssh/id_ed25519 user@203.0.113.10 # явно указать ключПовторяющиеся параметры удобнее держать в ~/.ssh/config, чтобы потом просто писать ssh myvps:
Host myvps
HostName 203.0.113.10
User user
Port 2222
IdentityFile ~/.ssh/id_ed255191. Входите по ключам, затем отключите пароли
Создайте современный ключ на своей машине и скопируйте его на сервер:
ssh-keygen -t ed25519 -C "you@laptop"
ssh-copy-id user@your-serverУбедитесь, что вход по ключу работает, и только потом полностью отключите пароли, чтобы у брутфорса не осталось цели:
PasswordAuthentication no
PermitRootLogin no
KbdInteractiveAuthentication no
# применить
sudo sshd -t && sudo systemctl restart ssh2. Добавьте fail2ban
fail2ban следит за логом авторизации и временно блокирует IP, которые раз за разом не проходят вход, — это убирает шум от ботов даже после отключения паролей:
sudo apt install -y fail2ban python3-systemdСоздайте минимальный jail для SSH. backend = systemd заставляет его читать лог sshd из журнала: в Debian 12 нет файла /var/log/auth.log, и без этой строки fail2ban останавливается на Have not found any log file for sshd jail.
[sshd]
enabled = true
backend = systemd
maxretry = 4
bantime = 1h
findtime = 10msudo systemctl enable fail2ban
sudo systemctl restart fail2ban
sudo fail2ban-client status sshdКак добавить свой адрес в ignoreip, разблокировать IP и завести jail для nginx — в руководстве по fail2ban для Ubuntu и Debian (англ.) (англ.).
3. Стоит ли менять порт?
Перенос SSH с порта 22 реальной защиты не добавляет — сканер находит новый порт за секунды, — но заметно уменьшает шум в логах. Это косметика, а не защита. Если всё же меняете порт, первым делом откройте новый порт в файрволе. Как узнать, какой порт реально слушает sshd, и как подключаться на другой порт через ssh, scp и rsync — рассказано выше, в разделе «Подключение по SSH».
4. Ограничьте, кто может входить
Разрешите SSH только тем учётным записям, которым он действительно нужен:
# в sshd_config
AllowUsers deploy admin5. Закройте файрволом всё остальное
Всё, кроме портов, которые вы действительно отдаёте в сеть, должно быть закрыто. Основы для SSH:
sudo ufw allow OpenSSH
sudo ufw enableКороткая версия
- Только ключи, пароли и вход под root отключены.
- fail2ban на jail для SSH.
- Файрвол закрыт для всего, что вы не отдаёте наружу.
- Белый список учётных записей для входа.
Этой комбинации достаточно, чтобы остановить подавляющее большинство атак на новый сервер. У каждого VPS VMHeaven в панели есть браузерная консоль VNC, которая работает без SSH, так что настраивать всё это можно уверенно, не боясь остаться без доступа.
Частые вопросы
Что такое SSH?
SSH (Secure Shell) — протокол для зашифрованного удалённого доступа к серверу через командную строку: вы подключаетесь по IP-адресу сервера, проходите авторизацию (обычно по ключу, а не по паролю) и получаете терминал, как если бы сидели перед этой машиной напрямую. Порт по умолчанию — TCP 22.
Как подключиться к серверу по SSH?
Самая простая форма — ssh user@адрес_сервера. Если сервер слушает нестандартный порт, добавьте -p НОМЕР_ПОРТА; чтобы указать конкретный ключ — -i ~/.ssh/id_ed25519. Повторяющиеся параметры удобно хранить в файле ~/.ssh/config под коротким псевдонимом, чтобы потом подключаться просто по имени, например ssh myvps.
Как защитить SSH от подбора пароля?
Port 22 на публичном IP начинают брутфорсить в первые минуты после выхода в сеть. Сгенерируйте ключ (ssh-keygen -t ed25519), скопируйте его на сервер (ssh-copy-id), затем отключите вход по паролю в /etc/ssh/sshd_config (PasswordAuthentication no, PermitRootLogin no) и добавьте fail2ban, который временно блокирует IP после нескольких неудачных попыток. Эта комбинация останавливает подавляющее большинство атак на новый сервер.