Разработка

Как изменить стандартный 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).


Ищете надежного партнера по веб-разработке и автоматизации? Мы помогаем бизнесу расти с помощью современных технологий, автоматизации процессов и экспертного SEO. Свяжитесь с нами, чтобы обсудить вашу задачу.

🚀 Нужна помощь с сайтом на 1С-Битрикс или Аспро?

Я работаю удалённо по всей России и СНГ. Узнайте цены и условия для вашего города:

Все регионы →