SystemdDoctor
мешает работе sshd сокеты частое

sshd: смена порта не действует из-за ssh.socket

В части дистрибутивов ssh работает через сокет-активацию: порт слушает ssh.socket, а не сам sshd. Тогда параметр порта в sshd_config не применяется, и правки в нём ничего не меняют.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Активна сокет-активация

    При активном ssh.socket адрес открывает systemd и передаёт готовое соединение sshd. Настройка порта в конфигурации sshd в этом случае не используется.

  2. Порт занят прежним экземпляром sshd

    Если после правки порта служба не перезапускалась, прежний процесс продолжает слушать старый порт. Новый порт при этом нигде не открыт.

  3. Одновременно включены и служба, и сокет

    Тогда порт занимает то, что стартовало первым, а поведение меняется от перезагрузки к перезагрузке.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Активна ли сокет-активация и какой адрес слушается.

systemctl status ssh.socket --no-pager | head -8

Что думает о порте сам sshd.

sudo sshd -T | grep -i "^port"

Кто фактически слушает порт: systemd или sshd.

sudo ss -tlnp | grep ssh

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Активна сокет-активация
Почему происходит
При активном ssh.socket адрес открывает systemd и передаёт готовое соединение sshd. Настройка порта в конфигурации sshd в этом случае не используется.
Как проверить
Посмотрите состояние сокета и фактический адрес.
systemctl status ssh.socket --no-pager | head -8
sudo ss -tlnp | grep -E ":(22|2222)\s"
Как исправить
Меняйте порт в переопределении сокета: сбросьте прежний адрес и задайте новый.
sudo systemctl edit ssh.socket   # [Socket]\nListenStream=\nListenStream=2222
sudo systemctl restart ssh.socket
2. Порт занят прежним экземпляром sshd
Почему происходит
Если после правки порта служба не перезапускалась, прежний процесс продолжает слушать старый порт. Новый порт при этом нигде не открыт.
Как проверить
Посмотрите процессы sshd и открытые порты.
pgrep -a sshd | head
sudo ss -tlnp | grep ssh
Как исправить
Перезапустите службу или сокет, в зависимости от способа работы, и убедитесь, что новый порт открыт. Старую сессию до проверки не закрывайте.
3. Одновременно включены и служба, и сокет
Почему происходит
Тогда порт занимает то, что стартовало первым, а поведение меняется от перезагрузки к перезагрузке.
Как проверить
Посмотрите состояния включения.
systemctl is-enabled ssh.service ssh.socket
Как исправить
Выберите один способ: либо сокет-активация, либо обычная служба со своим портом.

Пример вывода

Порт изменён в конфигурации, но слушает systemd на прежнем. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

$ sudo grep -i "^Port" /etc/ssh/sshd_config
Port 2222

$ sudo ss -tlnp | grep :22
LISTEN 0 4096 *:22 *:* users:(("systemd",pid=1,fd=110))

Связанные ошибки

Где встречается чаще всего

Источники

  • systemd.socket(5)
    Сокет-активация и переопределение адреса прослушивания.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Проверено на Ubuntu 24.04 с включённым ssh.socket: порт из sshd_config не применяется.
    собственная проверка, systemd 255
    сверено 15 сентября 2026