KVM VPS - сменить порт ssh для Ubuntu 24.04 - bash скрипт - 2026

Материал из Wiki - Iphoster - the best ever hosting and support. 2005 - 2026
Перейти к:навигация, поиск

Bash-скрипт для смены стандартного порта SSH (22) на произвольный на Ubuntu 24.04 (KVM VPS) с поддержкой socket-based activation (ssh.socket) и автоматической настройкой UFW.

Код скрипта

#!/usr/bin/env bash

set -e

if [[ $EUID -ne 0 ]]; then
    echo "Запустите скрипт от root."
    exit 1
fi

read -p "Введите новый SSH порт: " PORT

if ! [[ "$PORT" =~ ^[0-9]+$ ]] || ((PORT < 1 || PORT > 65535)); then
    echo "Некорректный порт."
    exit 1
fi

CONFIG="/etc/ssh/sshd_config"
BACKUP="/etc/ssh/sshd_config.bak.$(date +%F_%H-%M-%S)"

cp "$CONFIG" "$BACKUP"

if grep -Eq '^[#[:space:]]*Port[[:space:]]+' "$CONFIG"; then
    sed -Ei "s|^[#[:space:]]*Port[[:space:]]+.*|Port ${PORT}|g" "$CONFIG"
else
    echo "Port ${PORT}" >> "$CONFIG"
fi

echo
echo "Проверка конфигурации..."

if ! sshd -t; then
    echo "Ошибка в конфигурации. Восстанавливаю резервную копию."
    cp "$BACKUP" "$CONFIG"
    exit 1
fi

if systemctl is-enabled ssh.socket >/dev/null 2>&1 || systemctl is-active ssh.socket >/dev/null 2>&1; then
    echo "Обнаружен ssh.socket"

    mkdir -p /etc/systemd/system/ssh.socket.d

    cat >/etc/systemd/system/ssh.socket.d/override.conf <<EOF
[Socket]
ListenStream=
ListenStream=${PORT}
EOF

    systemctl daemon-reload
    systemctl restart ssh.socket
else
    systemctl restart ssh.service
fi

if command -v ufw >/dev/null 2>&1; then
    if ufw status | grep -q "Status: active"; then
        ufw allow ${PORT}/tcp
    fi
fi

echo
echo "========================================"
echo "Настройки SSH:"
echo

sshd -T | grep '^port'

echo
echo "Слушаемые порты:"
ss -tlnp | grep ssh || true

IP=$(hostname -I | awk '{print $1}')

echo
echo "Подключение:"
echo "ssh -p ${PORT} root@${IP}"

echo
echo "Резервная копия:"
echo "$BACKUP"

echo
echo "Не закрывайте текущую SSH-сессию, пока не убедитесь, что вход через новый порт работает."
echo "========================================"

Что делает скрипт

  • Проверяет, что запущен от root (UID 0)
  • Запрашивает у пользователя новый номер порта
  • Валидирует порт: только число в диапазоне 1–65535
  • Создаёт резервную копию /etc/ssh/sshd_config с меткой времени
  • Находит и заменяет директиву Port в sshd_config (или добавляет, если её нет)
  • Проверяет корректность конфигурации командой sshd -t
  • Восстанавливает резервную копию при ошибке и завершает работу
  • Определяет, используется ли ssh.socket (socket-based activation в systemd)
    • Если да — создаёт drop-in override для ListenStream и перезапускает сокет
    • Если нет — перезапускает ssh.service как обычно
  • При активном UFW открывает новый порт в фаерволе
  • Выводит итоговую конфигурацию, слушаемые порты, строку подключения и путь к резервной копии

Особенности Ubuntu 24.04

Начиная с Ubuntu 22.04+ SSH-демон может использовать socket-based activation. Вместо ssh.service напрямую запускается ssh.socket, который слушает порт и активирует ssh.service при входящем соединении.

Простая смена Port в sshd_config и перезапуск ssh.service в этом случае не сработает, потому что сокет продолжает слушать старый порт. Скрипт корректно обрабатывает этот сценарий:

  • Создаёт /etc/systemd/system/ssh.socket.d/override.conf
  • Переопределяет ListenStream
  • Вызывает daemon-reload и перезапуск ssh.socket

Использование

Сохраните скрипт в файл, например change-ssh-port.sh:

chmod +x change-ssh-port.sh
sudo ./change-ssh-port.sh

Следуйте инструкциям:

  1. Введите желаемый номер порта
  2. Дождитесь завершения
  3. Откройте вторую SSH-сессию с новым портом и проверьте подключение
  4. Если всё работает — закройте старую сессию

Важно

  • Не закрывайте текущую SSH-сессию, пока не проверите подключение по новому порту — при ошибке вы потеряете доступ к серверу
  • Резервная копия sshd_config сохраняется в ту же директорию
  • Скрипт проверяет конфигурацию перед перезапуском — при ошибке автоматически откатывает изменения

Резюме

Скрипт автоматизирует смену SSH-порта на Ubuntu 24.04, учитывая особенности socket-based activation и фаервола UFW. Включает валидацию ввода, резервное копирование, проверку конфигурации и автоматический откат при ошибке.

Ссылки

×
Реклама
← В главную
ИКС 88x31 - Visitor counter