Як правильно поміняти порт SSH
на Ubuntu Server 24.04
Одне з правил безпеки сервера - змінити стандартний порт доступу по протоколу SSH.
Краще це робити до того, як буде встановлено firewall, щоб не підправляти порт ще й там.
Логинимося sudo-користувачем на сервер, отримуємо права root.
Додай новий порт до sshd_config
sshd_config
У файлі /etc/ssh/sshd_config
(увага! не ssh_config, а sshd_...!) знаходимо рядок "#Port 22" розкоментовуємо, і вказуємо бажаний нестандартний порт, наприклад:
Port 2202
Рядок "#PubkeyAuthentication yes" - також розкоментуємо, хоч це ні на що не вплине, адже за замовчуванням дозвіл на з'єднання по ключу і так дозволено, просто щоб позбутися двозначності.
Якщо firewall вже встановлено - дозволь новий порт у firewall
Якщо ти використовуєш iptables
, додай правило:
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-сесію! В іншому вікні термінала спробуй зайти на сервер:
ssh -p 2202 olex@<ip_або_домен>
І швидше за все - воно НЕ працює:
ssh: connect to host 178.159.43.44 port 2202: Connection refused
Перейди в ту сессію термінала, що ще залогінена на сервері, перевір:
systemctl status ssh
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/usr/lib/systemd/system/ssh.service; disabled; preset: enabled)
Active: active (running) since Fri 2025-07-04 10:03:28 UTC; 11s ago
TriggeredBy: ● ssh.socket
Docs: man:sshd(8)
man:sshd_config(5)
Process: 19502 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
Main PID: 19505 (sshd)
Tasks: 1 (limit: 4051)
Memory: 1.2M (peak: 2.5M)
CPU: 79ms
CGroup: /system.slice/ssh.service
└─19505 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"
Jul 04 10:03:28 alligator systemd[1]: Starting ssh.service - OpenBSD Secure Shell server...
Jul 04 10:03:28 alligator sshd[19505]: Server listening on :: port 22.
Jul 04 10:03:28 alligator systemd[1]: Started ssh.service - OpenBSD Secure Shell server.
Jul 04 10:03:33 alligator sshd[19506]: banner exchange: Connection from 3.143.33.63 port 36588: invalid format
Бачимо, що sshd
досі слухає порт 22, а не 2202:
Server listening on :: port 22.
попри те, що:
sshd -T | grep port
port 2202
Проблема: sshd
запускається через ssh.socket
, а не напряму
sshd
запускається через ssh.socket
, а не напрямуОсь ключовий рядок:
TriggeredBy: ● ssh.socket
Це означає, що sshd
запускається через systemd socket activation, тобто ssh.socket
слухає порт 22, і передає з'єднання в sshd
. Сам sshd
при цьому не слухає самостійно.
Рішення: відключити ssh.socket
, запускати sshd
напряму
ssh.socket
, запускати sshd
напрямуЗупини socket:
systemctl stop ssh.socket
Вимкни socket назавжди:
systemctl disable ssh.socket
Увімкни
sshd
напряму:
systemctl enable ssh
Запусти службу:
systemctl restart ssh
Перевір:
ss -tuln | grep 2202
tcp LISTEN 0 128 0.0.0.0:2202 0.0.0.0:*
tcp LISTEN 0 128 [::]:2202 [::]:*
Якщо встановлений firewall
Зберігаємо наш порт у правилах iptables:
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6
Ще раз тестуємо вхід:
Спробуй ще раз залогінитися у паралельному терміналі, де було "Connection refused".
Якщо ок - для надійності можна перезавантажити сервер і перевірити, чи все ок після цього.
Last updated