Зміцнення SSH: ключі, порт, обмеження
Як налаштувати sshd: вхід лише за ключем, обмеження користувачів і адрес, зміна порту та як у процесі не втратити доступ.
Оновлено 23 серпня 2026 р.
SSH — це єдині двері до машини, якою ви користуєтеся щодня, і головна ціль автоматизованих брутфорс-атак. Ви налаштовуєте його один раз, і після цього він не потребує уваги.
Усі правки робіть в окремому файлі /etc/ssh/sshd_config.d/99-hardening.conf — так оновлення пакета не перезапише вашу роботу й не залишить вас без доступу.
Ключі замість паролів
PasswordAuthentication no
PubkeyAuthentication yes
KbdInteractiveAuthentication no
PermitEmptyPasswords no
Перед застосуванням переконайтеся, що ключ справді працює: увійдіть із ним в окремому вікні. Ключі, додані на вкладці «Доступ» панелі /hosting/vds/m/<id>, потрапляють до користувача root; для інших користувачів їх потрібно вручну покласти в ~/.ssh/authorized_keys.
Генерування ключа на вашому боці:
ssh-keygen -t ed25519 -C "work laptop"
ed25519 коротший і швидший за RSA. Якщо ваш інструмент його не підтримує, використовуйте rsa завдовжки щонайменше 4096 біт.
Кому можна входити
PermitRootLogin prohibit-password
AllowUsers artem deploy
MaxAuthTries 3
LoginGraceTime 20
ClientAliveInterval 300
ClientAliveCountMax 2
AllowUsers — найефективніше правило після вимкнення паролів: перебір чужих імен припиняється одразу. Докладніше про root — вимкнення входу root за паролем.
Обмеження за адресою, якщо ви працюєте з фіксованого місця:
Match Address 203.0.113.5
PermitRootLogin yes
Зміна порту
Перенесення SSH з 22 на нестандартний порт не захищає від цілеспрямованої атаки, але прибирає майже весь шум від автоматичних сканерів у ваших логах.
Port 2222
Порядок кроків суворо такий:
ufw allow 2222/tcp
sshd -t
systemctl restart ssh
ssh -p 2222 artem@<address>
ufw delete allow 22/tcp
Правило фаєрвола — перед перезапуском, а видалення старого — лише після успішного входу на новому порту. Дивіться також порти.
Застосування та перевірка
sshd -t
sshd -T | grep -Ei "passwordauth|permitroot|allowusers|port"
systemctl restart ssh
sshd -t перевіряє синтаксис, sshd -T показує підсумкову чинну конфігурацію — саме її, а не те, що ви написали у файлі.
Поки налаштовуєте, не закривайте поточну сесію. Вона переживе перезапуск sshd, і через неї ви зможете відкотити невдалу правку. Якщо все ж втратите доступ — вкладка «Консоль» у панелі працює незалежно від SSH.
Типові помилки
| Помилка | Наслідок | Виправлення |
|---|---|---|
| Вимкнули паролі, не перевіривши ключ | Повна втрата мережевого доступу | Увійдіть через консоль панелі та відновіть налаштування |
Правка в головному файлі поверх рядка з sshd_config.d | Налаштування не діє | Перевірте через sshd -T |
| Змінили порт без правила ufw | Втрата доступу | Спершу правило, потім порт |
Права на ~/.ssh ширші за 700 | Ключ мовчки ігнорується | chmod 700 ~/.ssh, chmod 600 authorized_keys |
AllowUsers без вашого імені | Ви блокуєте доступ собі | Консоль панелі, відредагуйте файл |
У
sshd_configперемагає перше входження параметра, а файли зsshd_config.dпідключаються на початку. Тому перевіряйте результат черезsshd -T, а не читаючи файл.
fail2ban прибере решту брутфорс-шуму.