Руководства

Что такое SSH и как защитить подключение к серверу

SSH — протокол для защищённого удалённого доступа к серверу. Как подключиться по SSH и настроить вход только по ключу, fail2ban и файрвол за один проход.

Опубликовано ~8 мин чтения

Короткий ответ: SSH (Secure Shell) — это протокол для зашифрованного удалённого доступа к серверу через командную строку: вы подключаетесь по его IP-адресу, вводите логин (обычно по ключу, не по паролю) и получаете терминал, как если бы сидели перед этой машиной. Порт 22 на публичном IP начинают брутфорсить в первые же минуты после того, как сервер выходит в сеть. Экзотика для защиты не нужна — вход только по ключу плюс ограничитель частоты попыток снимает практически весь риск. Дальше — практическая настройка по шагам.

Подключение по SSH

Простейшее подключение — имя пользователя, адрес сервера и, если нужно, нестандартный порт или конкретный ключ:

подключение по 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:

~/.ssh/config
Host myvps
    HostName 203.0.113.10
    User user
    Port 2222
    IdentityFile ~/.ssh/id_ed25519

1. Входите по ключам, затем отключите пароли

Создайте современный ключ на своей машине и скопируйте его на сервер:

на вашем компьютере
ssh-keygen -t ed25519 -C "you@laptop"
ssh-copy-id user@your-server

Убедитесь, что вход по ключу работает, и только потом полностью отключите пароли, чтобы у брутфорса не осталось цели:

/etc/ssh/sshd_config
PasswordAuthentication no
PermitRootLogin no
KbdInteractiveAuthentication no
# применить
sudo sshd -t && sudo systemctl restart ssh

2. Добавьте 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.

/etc/fail2ban/jail.local
[sshd]
enabled = true
backend = systemd
maxretry = 4
bantime = 1h
findtime = 10m
включить + перезапустить + проверить
sudo 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 admin

5. Закройте файрволом всё остальное

Всё, кроме портов, которые вы действительно отдаёте в сеть, должно быть закрыто. Основы для SSH:

ufw
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 после нескольких неудачных попыток. Эта комбинация останавливает подавляющее большинство атак на новый сервер.

Читайте также

Все статьи раздела

xrdp on Ubuntu and Debian: install an RDP desktop (XFCE) on a VPS and fix the black screen(англ.)

Install xrdp with XFCE on Ubuntu 24.04 or Debian 12/13, add xrdp to ssl-cert, open port 3389 to your IP only or tunnel it over SSH, and fix the black screen.

Set up your own WireGuard VPN server on a VPS (Debian and Ubuntu)(англ.)

Install WireGuard on Debian 12/13 or Ubuntu 24.04, create keys, enable forwarding and NAT, open UDP 51820 and connect your laptop and phone, step by step.

Kali Linux on a VPS for pentesting: the setup that works(англ.)

No Kali template? Run Kali's tools on a hardened Debian VPS in Docker, and stay inside your written scope and the host's rules while you test.

SSH tunnel explained: local, remote and dynamic (SOCKS) port forwarding(англ.)

What an SSH tunnel is and how to build one: local forwarding with ssh -L, reverse tunnels with ssh -R, a SOCKS proxy with ssh -D, autossh and PuTTY.

How to exit vim: :wq, :q! and every other way out(англ.)

Esc then :wq saves and quits; :q! quits without saving. Every exit command, why vim traps people in the first place, and how to change the default editor.

How to generate an SSH key (ssh-keygen) and use it to log in(англ.)

ssh-keygen -t ed25519 creates a key pair in minutes. Why ed25519 over RSA, setting a passphrase, copying the key with ssh-copy-id, and loading it into ssh-agent.

tmux cheat sheet: sessions, windows, panes and the keys you actually use(англ.)

The tmux keys and commands used every day: Ctrl-b bindings for windows and panes, detaching and reattaching a session, copy mode, and a minimal .tmux.conf.

How to enable SSH on Ubuntu(англ.)

sudo apt install openssh-server, then systemctl enable --now ssh and ufw allow OpenSSH if a firewall is active. Ubuntu Server already has it; Ubuntu Desktop does not.