Разработка

Как изменить стандартный SSH-порт и подружить с этим VS Code: Полное руководство

Как изменить стандартный SSH-порт и подружить с этим VS Code: Полное руководство

Привет. Каждый, кто хоть раз размещал сервер в интернете, знает: не проходит и часа, как на стандартный 22-й порт SSH начинают сыпаться тысячи попыток подбора пароля от автоматизированных ботов. Один из самых простых и эффективных способов защиты — это смена стандартного порта на нестандартный.

В этой статье мы не только по шагам изменим SSH-порт на сервере с CentOS 9, но и разберем все «подводные камни», с которыми вы можете столкнуться при подключении через Visual Studio Code.

Часть 1: Почему вообще нужно менять порт?

Это называется «безопасность через неясность» (security through obscurity). Да, это не панацея и не заменяет надёжных паролей или SSH-ключей. Но это невероятно эффективный первый барьер.

Подавляющее большинство ботов — это простые скрипты, которые сканируют диапазоны IP-адресов в поисках открытого порта 22. Если ваш SSH-сервер работает на порту 6637 (или любом другом), вы просто исчезаете с их радаров. Журналы логов становятся чище, а нагрузка на сервер от постоянных неудачных аутентификаций снижается.

Часть 2: Меняем SSH-порт на сервере (CentOS 9)

Важно: Всегда выполняйте эти действия, имея открытую и активную SSH-сессию. Не закрывайте её, пока не убедитесь, что можете подключиться через новый порт!

Шаг 1: Редактируем конфигурационный файл sshd

sudo nano /etc/ssh/sshd_config

Находим закомментированную строку #Port 22. Убираем # и меняем порт на желаемый (например, 6637).

#Port 22
Port 6637

Сохраняем файл (Ctrl+X, Y, Enter).

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

sudo systemctl restart sshd

Служба уже работает на новом порту, но ваше текущее соединение не разорвется.

Шаг 3: Настраиваем Firewall (firewalld)

Теперь нужно «открыть» новый порт в брандмауэре.

# Добавляем правило для нового порта
sudo firewall-cmd --permanent --add-port=6637/tcp

# Перезагружаем firewall, чтобы применить правила
sudo firewall-cmd --reload

Для дополнительной безопасности можно закрыть старый порт: sudo firewall-cmd --permanent --remove-service=ssh.

Шаг 4: Настраиваем SELinux

SELinux имеет свои собственные политики безопасности, и ему нужно явно разрешить SSH использовать новый порт.

# Устанавливаем утилиту, если её нет
sudo dnf install -y policycoreutils-python-utils

# Добавляем правило для порта 6637
sudo semanage port -a -t ssh_port_t -p tcp 6637

Шаг 5: Тестируем!

Откройте новый терминал и попробуйте подключиться, явно указав порт через флаг -p:

ssh ваше_имя@IP_адрес_сервера -p 6637

Если подключение прошло успешно — поздравляю! Серверная часть настроена.


Часть 3: Подключаемся через VS Code и решаем проблемы

Итак, сервер готов, но при попытке подключения через VS Code Remote-SSH вы можете столкнуться с ошибками. Давайте разберем их по порядку — от самых очевидных до самых коварных.

Проблема №1: Как вообще указать новый порт в VS Code?

VS Code использует ваш локальный SSH-клиент и его конфигурацию. Самый правильный способ — создать запись для вашего сервера в файле ~/.ssh/config на вашем компьютере.

# ~/.ssh/config

Host bp-root
    HostName 88.218.168.117 # IP-адрес или домен
    User root
    Port 6637 # Указываем наш новый порт

Теперь в VS Code (и в терминале) вы можете подключаться, используя короткое имя bp-root, и все параметры, включая порт, применятся автоматически.

Проблема №2: VS Code всё равно пытается подключиться к порту 22!

Вы всё настроили в ~/.ssh/config, но в логах VS Code видите ssh: connect to host ... port 22: Connection refused.

  • Причина: Иногда VS Code не может найти ваш config файл по умолчанию.

  • Решение: Укажите ему путь явно.

  • Откройте настройки VS Code (`Ctrl + ,`).
    • В поиске введите ssh config.

    • Найдите параметр Remote.SSH: Config File.

    • Введите в него путь: ~/.ssh/config.

    • Перезагрузите VS Code и попробуйте снова.

  • Проблема №3: Коварный Host *. Порт игнорируется даже после всех настроек.

    Это самая неочевидная проблема. Вы смотрите логи и видите, что VS Code использует ваш config файл (-F ~/.ssh/config), но всё равно стучится на 22-й порт.

    • Причина: В вашем ~/.ssh/config есть глобальная секция Host *, в которой жёстко прописан Port 22. Конфигурация SSH работает по принципу «первый найденный параметр имеет приоритет». Клиент видит Port 22 в Host * и игнорирует Port 6637 в вашей более специфичной секции.

    • Решение:

  • Откройте `~/.ssh/config` на вашем локальном компьютере.
    • Найдите секцию Host *.

    • Удалите или закомментируйте строку Port 22 из этой секции.

    Host *
        # Port 22  <-- Вот она, проблема!
        # Другие глобальные настройки
    
  • Бонусная проблема: Ошибка Failed to parse remote port from server output

    Эта ошибка возникает, если при входе на сервер в консоль выводится какой-либо «мусор» — текст, баннеры, или, как в нашем случае, ошибка из стартового скрипта (-bash: [: missing]`). Скрипт VS Code не может разобрать этот вывод и найти нужную ему информацию.

    • Решение: Убедитесь, что при входе на сервер через обычный терминал не выводится ничего лишнего. Отредактируйте файлы .bash_profile или .bashrc на сервере и исправьте или закомментируйте проблемные строки.

    Заключение

    Смена порта SSH — это простой, но важный шаг для защиты вашего сервера. Как мы видим, он может вызвать цепочку неочевидных проблем в клиентских приложениях. Надеюсь, это руководство сэкономит вам время и нервы и поможет сделать ваш рабочий процесс не только безопасным, но и комфортным. Удачи

        body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; line-height: 1.6; }
        .checklist-container { max-width: 700px; margin: 20px auto; padding: 15px; border: 1px solid #ddd; border-radius: 8px; }
        .checklist { list-style: none; padding-left: 0; }
        .checklist li { margin-bottom: 12px; display: flex; align-items: flex-start; }
        .checklist input[type="checkbox"] { margin-top: 5px; margin-right: 12px; }
        .checklist label { font-size: 16px; }
        .checklist code { background-color: #ссс; padding: 2px 6px; border-radius: 4px; font-family: monospace; }
        .checklist h2 { border-bottom: 2px solid #eee; padding-bottom: 8px; margin-top: 0; }
        .checklist strong { color: #d9534f; }

    Часть 1: Настройка сервера

        -
    
            Отредактировать файл `/etc/ssh/sshd_config`, изменив/добавив директиву `Port`.
    
    
        -
    
            Перезапустить SSH-службу: `sudo systemctl restart sshd`.
    
    
        -
    
            Добавить правило в Firewall для нового порта: `sudo firewall-cmd --permanent --add-port=XXXX/tcp`.
    
    
        -
    
            Перезагрузить Firewall: `sudo firewall-cmd --reload`.
    
    
        -
    
            Добавить правило в SELinux для нового порта: `sudo semanage port -a -t ssh_port_t -p tcp XXXX`.
    
    
        -
    
            Проверить подключение из нового терминала: `ssh user@host -p XXXX`.

    Часть 2: Настройка клиента и VS Code

        -
    
            Обновить/добавить директиву `Port XXXX` в файле `~/.ssh/config` для нужного хоста.
    
    
        -
    
            **[Проблема VS Code]** Указать путь `~/.ssh/config` в настройке `Remote.SSH: Config File`.
    
    
        -
    
            **[Проблема VS Code]** Проверить `~/.ssh/config` на наличие `Port 22` в глобальной секции `Host *` и удалить эту строку.
    
    
        -
    
            **[Проблема VS Code]** Убедиться, что при входе на сервер нет лишних сообщений (проверить `.bash_profile` и `.bashrc`).