Как безопасно сменить порт SSH и пароль root на Linux VPS

15 мин чтения 2 просмотров 0
Содержание

Перенос SSH с порта 22 не остановит целенаправленную атаку, но уберёт из логов большую часть автоматического сканирования, а смена пароля root — первое, что стоит сделать на новом сервере. В этой инструкции показано, как сменить порт SSH и пароль root на Linux VPS без потери доступа: правка sshd_config, метка SELinux для порта в Rocky Linux и AlmaLinux, правила файрвола, юнит ssh.socket в Ubuntu 22.10 и 24.04 и откат через VNC-консоль, если что-то пошло не так. Подходит для Debian, Ubuntu, CentOS 7 и Rocky/AlmaLinux 8 и 9 на облачных и выделенных серверах JUSTG.

Шаг 1: Смените пароль root

Сделайте это сразу, пока подключение работает как обычно. Именно этот пароль root понадобится во VNC-консоли при восстановлении, поэтому сохраните его в менеджере паролей. Используйте не менее 16 случайных символов.

# Generate a random 24-character password (optional)
openssl rand -base64 18
# Set the new root password (type it twice)
passwd root

Чтобы сменить пароль другой учётной записи, выполните passwd имя_пользователя.

Шаг 2: Выберите новый порт SSH

Возьмите свободный порт в диапазоне 1024–49151, например 2222 или 22022, и убедитесь, что его не занимает другая служба. Ниже в примерах используется 2222.

# Nothing should be listening on the new port yet
ss -tlnp | grep ':2222' || echo "port 2222 is free"

Шаг 3: Добавьте новый порт в sshd_config

Сделайте резервную копию и настройте sshd слушать оба порта — старый и новый. Пока порт 22 открыт, ошибка на следующих шагах не лишит вас доступа.

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%F)
nano /etc/ssh/sshd_config
# Replace the "#Port 22" line with BOTH ports during the change:
Port 22
Port 2222

Шаг 4: Разрешите порт SSH в SELinux (Rocky Linux / AlmaLinux / CentOS)

В системах на базе Red Hat SELinux разрешает sshd слушать только порты с меткой ssh_port_t. Без этого шага sshd не запустится на новом порту с ошибкой bind «Permission denied». В Debian и Ubuntu SELinux по умолчанию не используется — шаг можно пропустить.

# Rocky Linux / AlmaLinux 8, 9
dnf install -y policycoreutils-python-utils
# CentOS 7
yum install -y policycoreutils-python

semanage port -a -t ssh_port_t -p tcp 2222
semanage port -l | grep ssh_port_t

Шаг 5: Откройте новый порт SSH в файрволе

# Debian / Ubuntu with UFW
ufw allow 2222/tcp
ufw status

# CentOS / Rocky / AlmaLinux with firewalld
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload
firewall-cmd --list-ports
Если вместо UFW или firewalld у вас собственный скрипт iptables или nftables, добавьте туда разрешающее правило для TCP 2222. Помните, что у каждого облачного сервера JUSTG есть бесплатный IPv6; UFW и firewalld применяют правила к IPv6 автоматически.

Шаг 6: Перезапустите SSH (и учтите ssh.socket в Ubuntu 22.10+ и 24.04)

Проверьте синтаксис и перезапустите службу. Текущая сессия не оборвётся.

sshd -t                         # syntax check, no output = OK

# Debian, Ubuntu 22.04 and older
systemctl restart ssh
# CentOS / Rocky / AlmaLinux
systemctl restart sshd

# Confirm sshd is listening on both ports
ss -tlnp | grep sshd

Начиная с Ubuntu 22.10 SSH запускается через socket activation systemd: порт слушает ssh.socket, поэтому перезапуск одной службы ssh порт не меняет. Выберите вариант для своей версии:

# Is socket activation in use?
systemctl is-active ssh.socket

# Ubuntu 24.04 (and 23.10+): the Port lines in sshd_config are read
# by a systemd generator, so reload and restart the socket
systemctl daemon-reload
systemctl restart ssh.socket

# Ubuntu 22.10 / 23.04: add the ports to a socket override instead
mkdir -p /etc/systemd/system/ssh.socket.d
cat > /etc/systemd/system/ssh.socket.d/listen.conf <<'EOF'
[Socket]
ListenStream=
ListenStream=22
ListenStream=2222
EOF
systemctl daemon-reload
systemctl restart ssh.socket
# Alternative on any of these Ubuntu releases: go back to the classic service
systemctl disable --now ssh.socket
systemctl enable --now ssh.service

Шаг 7: Проверьте новый порт SSH во второй сессии

Не закрывайте текущую сессию. Подключитесь из нового терминала на новый порт и продолжайте только после успешного входа.
# From a SECOND terminal on your computer
ssh -p 2222 [email protected]

# Optional ~/.ssh/config entry so you can just type "ssh myvps"
Host myvps
    HostName 203.0.113.40
    Port 2222
    User root

«Connection timed out» обычно означает, что порт всё ещё закрыт файрволом. «Connection refused» — sshd не слушает этот порт: проверьте SELinux, ssh.socket и вывод ss -tlnp.

Шаг 8: Закройте порт 22

Когда новый порт работает, удалите старый из конфигурации SSH и из файрвола, ещё раз перезапустите службу и повторите проверку из нового терминала.

# Remove "Port 22" from sshd_config (and from listen.conf on Ubuntu 22.10/23.04)
sed -i '/^Port 22$/d' /etc/ssh/sshd_config
sshd -t && systemctl restart sshd      # use "ssh" on Debian/Ubuntu
# Ubuntu 22.10+ with ssh.socket: systemctl daemon-reload && systemctl restart ssh.socket

# UFW
ufw delete allow 22/tcp
ufw delete allow OpenSSH
# firewalld
firewall-cmd --permanent --remove-service=ssh
firewall-cmd --reload

Шаг 9: Откат через VNC-консоль

Если доступ потерян, VNC-консоль всё равно работает, так как не зависит от сети и SSH. Войдите в личный кабинет JUSTG → Мои продукты и услуги → выберите VPS → панель управления и откройте консоль; если не нашли её, создайте тикет. Войдите как root с паролем из шага 1 и верните настройки:

# In the VNC console, logged in as root
cp /etc/ssh/sshd_config.bak.* /etc/ssh/sshd_config   # or re-add "Port 22"
ufw allow 22/tcp                       # Debian / Ubuntu
firewall-cmd --add-service=ssh         # CentOS / Rocky / AlmaLinux (runtime)
systemctl restart ssh || systemctl restart sshd

Частые вопросы

Смена порта SSH делает сервер защищённым?

Она уменьшает шум от ботов в логах, но сама по себе защитой не является. Для полноценной защиты сочетайте её с входом по ключу, отключённым входом по паролю и файрволом.

Почему Ubuntu 24.04 по-прежнему слушает порт 22 после правки sshd_config?

Порт удерживает ssh.socket. Выполните systemctl daemon-reload, затем systemctl restart ssh.socket, либо отключите сокет и используйте ssh.service, как в шаге 6.

После смены порта sshd не запускается в Rocky Linux. В чём дело?

Почти всегда в SELinux. Выполните journalctl -u sshd -n 20; если видите ошибку bind, добавьте порт командой semanage port -a -t ssh_port_t -p tcp 2222 и перезапустите службу.

Если после смены порта SSH подключиться не удаётся, создайте тикет по адресу https://www.justg.com/submitticket.php — техническая поддержка JUSTG поможет.

Помог ли вам данный ответ?

Похожие руководства

root@vps: ~ $ ssh-keygen -t ed25519 -C "laptop-2026"$ ssh-copy-id -i ~/.ssh/id_ed25519.pub root@203…$ ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 … Linux-сервер Вход по SSH-ключу в Linux: настройка ключей ed25519 и отключение входа по паролю Как настроить вход по SSH-ключу ed25519 на Linux VPS, права authorized_keys и безопасно отключить вход по паролю. 14 мин чтения 7 Читать root@vps: ~ $ ss -tulpn$ sshd -T | grep -i '^port'$ nohup sh -c 'sleep 600; ufw disable' >/dev/nu… Linux-сервер Настройка файрвола в Linux: UFW и firewalld на VPS (IPv4 и IPv6) Настройка файрвола Linux через UFW или firewalld: сначала SSH, веб-порты, доступ по IP, IPv6 и восстановление доступа. 16 мин чтения 2 Читать root@vps: ~ $ free -h$ swapon --show$ df -h / Linux-сервер Как добавить swap на Linux VPS (тарифы с 512 МБ и 1 ГБ ОЗУ) Добавление swap на Linux VPS с малым объёмом ОЗУ: файл подкачки через fallocate или dd, fstab и настройка swappiness. 12 мин чтения 2 Читать root@vps: ~ $ df -hT$ df -i$ du -xh --max-depth=1 / 2>/dev/null | sort -h … Linux-сервер Диск заполнен в Linux: как найти и освободить место на VPS Диск Linux заполнен? Ищем, что занимает место (df, du, ncdu), и чистим журнал, кэш apt/dnf, Docker, логи и удалённые файлы. 15 мин чтения 2 Читать