Как временно запустить вторичный SSH-сервер на отдельном порту

Вопрос или проблема

Как запустить SSH-демон на порту, отличном от стандартного 22?

Я напортачил с конфигурацией SSH на облачной виртуальной машине, из-за чего теперь SSH всегда запрашивает пароль. Мои первые попытки исправить это заблокировали меня, и я был вынужден размонтировать диск, смонтировать его внутри работающей виртуальной машины и исправить файлы до известного рабочего состояния. Однако он все еще требует ввода пароля.

Я хотел бы обновить свой /etc/ssh/sshd_config и перезапустить основной ssh-демон, который я могу протестировать, при этом оставив другой демон работающим с старой конфигурацией, чтобы я мог восстановить конфигурацию, если первый заблокирует меня. Как бы я сделал это, особенно на Ubuntu?

Вы не указали версию Ubuntu, так что я не уверен, какую систему инициализации вы используете.

Если это systemd, у вас может быть файл /etc/systemd/system/sshd.service. Вы могли бы сделать его копию как /etc/systemd/system/sshd_alt.service. Далее измените строку ExecStart и добавьте -p 22000 или что-то подобное. После этого выполните systemctl enable sshd_alt и systemctl start sshd_alt. Вы также можете указать совершенно другой файл конфигурации.

Вы также можете просто вручную запустить копию в screen или что-то подобное, если это однократное дело. Просто запустите screen и выполните что-то вроде /usr/sbin/sshd -D -p 22200. Вы запустите запасной sshd-демон, пока не сможете переподключиться к этому screen и убить процесс.

Или, как сказал @EEAA. Просто не отключайтесь, используйте вторую сессию, чтобы протестировать, можете ли вы переподключиться.

Вы можете запустить sshd на альтернативном порту с помощью этой команды:

sshd -p 12345

Замените 12345 на ваш любимый номер порта. Если sshd не в вашем PATH, вам может понадобиться использовать полный путь в команде, например /usr/sbin/sshd.

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

Я только что нашел решение для систем на базе Debian. Надеюсь, вы сможете сделать то же самое на любой другой Unix-системе.

Создайте файл service-unit /etc/systemd/system/extra-sshd.service, где Alias удален, и для ExecStart добавлен ключ -f с новым путем конфигурации, в моем примере это -f /etc/ssh/extra_sshd_config

[Unit]
Description=Extra SSH server
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target auditd.service
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run

[Service]
EnvironmentFile=-/etc/default/ssh
ExecStartPre=/usr/sbin/sshd -t
ExecStart=/usr/sbin/sshd -f /etc/ssh/extra_sshd_config -D $SSHD_OPTS
ExecReload=/usr/sbin/sshd -t
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartPreventExitStatus=255
Type=notify
RuntimeDirectory=extra-sshd
RuntimeDirectoryMode=0755

[Install]
WantedBy=multi-user.target

Клонируйте /etc/ssh/sshd_config в /etc/ssh/extra_sshd_config, затем отредактируйте там Port, PidFile и все, что вам нужно. Например, я разрешил порт 22 только для пользователя git, чтобы позволить запросы gitlab pull-push и переместил основную конфигурацию на другой кастомный порт.

Пример отредактированных/добавленных строк ниже

Дополнительная конфигурация /etc/ssh/extra_sshd_config

Port 22
AllowUsers git
PidFile /var/run/extra-sshd.pid

Основная конфигурация /etc/ssh/sshd_config

Port 2222

После того, как все подготовлено, перезагрузите демон systemd и попытайтесь запустить и проверить статус службы

systemctl daemon-reload
systemctl restart extra-sshd
systemctl status extra-sshd

Должен быть ответ Active (Running) как ниже

● extra-sshd.service - Extra SSH server
     Loaded: loaded (/etc/systemd/system/extra-sshd.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2025-02-14 14:58:48 UTC; 9s ago
       Docs: man:sshd(8)
             man:sshd_config(5)
    Process: 1328991 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
   Main PID: 1329004 (sshd)
      Tasks: 1 (limit: 9456)
     Memory: 1.2M
     CGroup: /system.slice/extra-sshd.service
             └─1329004 sshd: /usr/sbin/sshd -f /etc/ssh/extra_sshd_config -D [listener] 0 of 10-100 startups

Feb 14 14:58:48 gitlab-1 systemd[1]: Starting Extra SSH server...
Feb 14 14:58:48 gitlab-1 sshd[1329004]: Server listening on 0.0.0.0 port 22.
Feb 14 14:58:48 gitlab-1 sshd[1329004]: Server listening on :: port 22.
Feb 14 14:58:48 gitlab-1 systemd[1]: Started Extra SSH server.

Если все прошло успешно, вы можете включить автозапуск нового дополнительного ssh-демона, который будет запускать его при каждом загрузке/перезагрузке системы

systemctl enable extra-sshd

.

Ответ или решение

Если у вас возникла необходимость запустить временный второй SSH сервер на другом порту, это может быть связано с различными проблемами, такими как внесение изменений в конфигурацию текущего SSH сервера, которые могут привести к потере доступа, или отладке конфигурации без вмешательства в основной сервер. Рассмотрим пошагово, как это сделать на примере Ubuntu с использованием systemd.

Теория

SSH (Secure Shell) — это сетевой протокол, который позволяет безопасно управлять сетевыми сервисами на уровне приложений. Обычно SSH сервер слушает на стандартном порту 22. Запуск дополнительного SSH сервера на другом порту позволяет проводить изменения в конфигурации и тестирование без риска потерять доступ к системе в случае ошибки.

Пример

Подготовка

  1. Резервное копирование текущей конфигурации: всегда начинайте с создания резервной копии текущей конфигурации SSH, чтобы иметь возможность вернуться к предыдущему рабочему состоянию.

    sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
  2. Создание альтернативного файла конфигурации: скопируйте текущий файл конфигурации SSH в новый, где будем вносить изменения.

    sudo cp /etc/ssh/sshd_config /etc/ssh/extra_sshd_config
  3. Изменение конфигурации нового SSH сервера: в файле /etc/ssh/extra_sshd_config измените параметры, такие как номер порта и добавьте уникальный идентификатор PID файла.

    Пример изменений:

    Port 2222
    PidFile /var/run/extra-sshd.pid

Применение

  1. Создание нового unit-файла для systemd: создайте файл службы для управления новым SSH процессом.

    sudo nano /etc/systemd/system/extra-sshd.service

    Вставьте в него следующую конфигурацию:

    [Unit]
    Description=Extra SSH server
    Documentation=man:sshd(8) man:sshd_config(5)
    After=network.target auditd.service
    ConditionPathExists=!/etc/ssh/sshd_not_to_be_run
    
    [Service]
    EnvironmentFile=-/etc/default/ssh
    ExecStartPre=/usr/sbin/sshd -t
    ExecStart=/usr/sbin/sshd -f /etc/ssh/extra_sshd_config -D $SSHD_OPTS
    ExecReload=/usr/sbin/sshd -t
    ExecReload=/bin/kill -HUP $MAINPID
    KillMode=process
    Restart=on-failure
    RestartPreventExitStatus=255
    Type=notify
    RuntimeDirectory=extra-sshd
    RuntimeDirectoryMode=0755
    
    [Install]
    WantedBy=multi-user.target
  2. Запуск и проверка работы нового SSH сервера: После создания конфигурации, выполните перезагрузку конфигурации systemd и запустите новую службу.

    sudo systemctl daemon-reload
    sudo systemctl start extra-sshd
    sudo systemctl status extra-sshd

    Убедитесь, что новый SSH сервер запущен и активен. Если все прошло успешно, вы увидите строки с подтверждением успешного запуска.

  3. Включение автозагрузки для нового SSH сервера: если вы планируете использовать его долгое время, активируйте автозагрузку.

    sudo systemctl enable extra-sshd

Заключение

Запуская дополнительный SSH сервер на отдельном порту, вы обеспечиваете себе запасной путь для восстановления системы в случае ошибок при внесении изменений в основной SSH сервер. Это особенно важно для удаленных серверов и виртуальных машин в облаке, где физический доступ к оборудованию невозможен.

Такая практика не только повышает безопасность ваших операций, но и снижает риск полного отказа системы, предоставляя возможность тестирования и отладки в реальных условиях. Всегда помните о соблюдении мер безопасности: используйте сложные пароли и, по возможности, ключи SSH для аутентификации.

Оцените материал
Добавить комментарий

Капча загружается...