Как сменить стандартный SSH-порт (22) для повышения безопасности на VPS?

В статье разберём:

  • как выбрать новый порт и убедиться, что он свободен;
  • как открыть порт во фаерволе заранее;
  • как поменять Port в конфигурации SSH и сохранить изменения в nano;
  • как протестировать подключение и закрыть 22-й;
  • какие ошибки встречаются и как откатиться при сбое.

Что понадобится

  • Доступ к серверу: IP-адрес, логин (root или пользователь с sudo), а также доступ к веб-консоли (VNC/Web Console) в панели хостера на случай проблем.

  • Windows 10/11 с PowerShell. Проверим, что SSH-клиент работает:

            
            ssh -V
            ssh -h
            
          
  • Ubuntu на сервере. Фаервол по умолчанию — ufw, все команды выполняем через sudo.

Проверка работы ssh в PowerShell

Подключение через PowerShell

Проверим, как выглядит подключение к серверу по новому порту. Пока основной (22-й) остаётся доступным, не закрывайте его до тех пор, пока новый порт не заработает.

    
    # Разовый тест (замените порт, IP и пользователя на свои)
    ssh -p 22222 user@123.45.67.89
    
  

Чтобы не вводить параметры каждый раз, создаём конфигурационный файл:

    
    # Файл %USERPROFILE%\.ssh\config
    Host my-vps
      HostName 123.45.67.89
      User user
      Port 22222
      IdentityFile C:\Users\ВАШ_ПОЛЬЗОВАТЕЛЬ\.ssh\id_rsa

    # Подключение теперь выполняется так:
    ssh my-vps
    
  
Подключение к VPS по новому порту в PowerShell

Выбираем и проверяем новый порт SSH

Выберите высокое значение (например, 22222 или 55222). Значения вроде 2222/2200 часто сканируются ботами.

1) Убедитесь, что нужные утилиты есть в системе (Ubuntu/Debian):

sudo apt update
sudo apt install -y iproute2  # содержит 'ss'
# опционально: sudo apt install -y net-tools  # для 'netstat'

2) Проверьте, не занят ли порт (замените 22222 на ваш):

# безопасный вариант без -p
sudo ss -ltn | grep -E '(:22222)$' || echo "порт свободен"

Если ‘ss’ отсутствует, используйте:

sudo netstat -ltn | grep -E '(:22222)$' || echo "порт свободен"
Проверка свободного порта на сервере Ubuntu

3) Сразу разрешите новый порт в UFW (до изменения sshd_config):

sudo ufw allow 22222/tcp comment 'SSH новый порт'
sudo ufw status numbered

Примечания:

  • Если UFW «inactive», сначала разрешите оба порта (старый 22 и новый), затем включите UFW: sudo ufw enable.
  • На некоторых VPS есть облачный фаервол у провайдера — там тоже откройте выбранный порт.

Открываем новый порт в ufw

Перед изменением конфигурации SSH нужно открыть новый порт во фаерволе. Иначе после перезапуска службы вы не сможете подключиться.

    
    sudo ufw allow 22222/tcp
    sudo ufw status
    
  

Совет: пока не проверите новый порт — не удаляйте разрешение для 22-го. Пусть оба работают параллельно.

Открытие нового SSH-порта в UFW

Редактируем sshd_config

Теперь задаём новый порт в конфигурации SSH.

    
    # Создаём резервную копию
    sudo cp -a /etc/ssh/sshd_config{,.bak}

    # Открываем конфиг в nano
    sudo nano /etc/ssh/sshd_config
    
  

Найдите строку:

    
    #Port 22
    
  

Удалите # и замените на новое значение:

    
    Port 22222
    
  

Горячие клавиши в nano:

  • Ctrl+W — поиск (введите Port и нажмите Enter).

  • Ctrl+O — сохранить файл.

  • Enter — подтвердить путь.

  • Ctrl+X — выйти из редактора.

Важно: оставьте только одну активную строку Port, иначе sshd возьмёт последнюю.

Изменение порта в sshd_config

Проверка синтаксиса и перезапуск SSH

После изменения файла убедитесь, что в нём нет ошибок. Проверим синтаксис:

    
    sudo sshd -t -f /etc/ssh/sshd_config
    
  

Если ошибок нет — команда ничего не выведет.

Перезапускаем службу SSH:

    
    sudo systemctl restart ssh
    
  

И проверяем, что новый порт слушается:

    
    ss -tulpn | grep ssh
    
  
Перезапуск SSH и проверка нового порта

Тест подключения в PowerShell

Откройте новое окно PowerShell (старую сессию не закрывайте!) и выполните подключение через новый порт:

    
    ssh -p 22222 user@123.45.67.89
    
  

Если подключение успешно — значит, всё сделано правильно и можно переходить к отключению 22-го порта.

Проверка входа по новому порту в PowerShell

Закрытие 22-го порта

Теперь, когда новый порт проверен и работает стабильно, можно убрать старый 22-й.

    
    sudo ufw delete allow 22/tcp
    sudo ufw status
    
  

Важно: делайте это только после успешного подключения по новому порту из другого окна PowerShell.

Отключение 22-го порта в UFW

Частые ошибки и решения

  • Connection refused — новый порт не слушается или заблокирован фаерволом.

            
            sudo systemctl status ssh --no-pager -l
            sudo ufw status
            ss -tulpn | grep ssh
            
          
  • Address already in use — порт занят другим процессом.

            
            ss -tulpn | grep :22222
            
          

    Выберите другой порт (например, 25252) и повторите настройку.

  • Несколько строк Port — учитывается только последняя. Убедитесь, что осталась одна строка:

            
            Port 22222
            
          
  • Permission denied (publickey) — если отключили пароли, проверьте права и ключи:

            
            chmod 700 ~/.ssh
            chmod 600 ~/.ssh/authorized_keys
            chown -R user:user ~/.ssh
            
          
  • Подключение идёт всё ещё на 22 — укажите порт явно:

            
            ssh -p 22222 user@123.45.67.89
            
          

Откат, если потеряли доступ

Если после смены порта вы не можете подключиться — восстановить доступ можно через веб-консоль в панели хостинга (VNC / Web Console).

  1. Откройте файл конфигурации:

            
            sudo nano /etc/ssh/sshd_config
            
          
  2. Верните стандартное значение:

            
            Port 22
            
          
  3. Откройте порт 22 в ufw:

            
            sudo ufw allow 22/tcp
            sudo ufw status
            
          
  4. Перезапустите SSH:

            
            sudo systemctl restart ssh
            
          
  5. Проверьте, что порт слушается:

            
            ss -tulpn | grep :22
            
          
Откат порта SSH через веб-консоль

Итоги

  • Выбрали новый порт и проверили, что он свободен.

  • Открыли его в ufw и изменили конфигурацию SSH.

  • Перезапустили службу и протестировали вход через новый порт.

  • После успешной проверки закрыли 22-й порт.

  • Разобрали частые ошибки и сценарий отката.