Як правильно поміняти порт SSH

на Ubuntu Server 24.04

Одне з правил безпеки сервера - змінити стандартний порт доступу по протоколу SSH.

Краще це робити до того, як буде встановлено firewall, щоб не підправляти порт ще й там.

Логинимося sudo-користувачем на сервер, отримуємо права root.

Додай новий порт до sshd_config

У файлі /etc/ssh/sshd_config (увага! не ssh_config, а sshd_...!) знаходимо рядок "#Port 22" розкоментовуємо, і вказуємо бажаний нестандартний порт, наприклад:

Port 2202

Рядок "#PubkeyAuthentication yes" - також розкоментуємо, хоч це ні на що не вплине, адже за замовчуванням дозвіл на з'єднання по ключу і так дозволено, просто щоб позбутися двозначності.

Якщо firewall вже встановлено - дозволь новий порт у firewall

Якщо ти використовуєш iptables, додай правило:

iptables -A INPUT -p tcp --dport 2202 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 2202 -j ACCEPT

🔒 Не видаляй порт 22, поки не переконаєшся, що 2202 працює.


Перезапусти SSH-демон

systemctl restart ssh

Перевір, що все працює

Не закривай свою SSH-сесію! В іншому вікні термінала спробуй зайти на сервер:


І швидше за все - воно НЕ працює:

Перейди в ту сессію термінала, що ще залогінена на сервері, перевір:

Бачимо, що sshd досі слухає порт 22, а не 2202:

попри те, що:

Проблема: sshd запускається через ssh.socket, а не напряму

Ось ключовий рядок:

Це означає, що sshd запускається через systemd socket activation, тобто ssh.socket слухає порт 22, і передає з'єднання в sshd. Сам sshd при цьому не слухає самостійно.


Рішення: відключити ssh.socket, запускати sshd напряму

  1. Зупини socket:

  1. Вимкни socket назавжди:

  1. Увімкни sshd напряму:

  1. Запусти службу:

  1. Перевір:


Якщо встановлений firewall

Зберігаємо наш порт у правилах iptables:

Ще раз тестуємо вхід:

Спробуй ще раз залогінитися у паралельному терміналі, де було "Connection refused".

Якщо ок - для надійності можна перезавантажити сервер і перевірити, чи все ок після цього.

Last updated