Вопрос или проблема
Когда я добавляю пользователей в разделе PAM файла sshd_config:
UsePAM yes
Match User employee_1
PasswordAuthentication yes
Я не могу перезапустить SSH-сервис и получаю сообщение ниже (Почему? пожалуйста, помогите):
root@ip-xxxxxxx:/etc/ssh# systemctl status ssh
● ssh.service - OpenBSD Secure Shell server
Loaded: загружен (/lib/systemd/system/ssh.service; включен; предустановка производителя: включена)
Active: неудачно (Результат: код выхода) с Вт 2019-04-23 18:19:00 UTC; 19s назад
Process: 895 ExecStart=/usr/sbin/sshd -D $SSHD_OPTS (код=вышел, статус=0/УСПЕХ)
Process: 2183 ExecStartPre=/usr/sbin/sshd -t (код=вышел, статус=255)
Main PID: 895 (код=вышел, статус=0/УСПЕХ)
Apr 23 18:19:00 ip-publicip systemd[1]: ssh.service: Контрольный процесс вышел, код=вышел статус=255
Apr 23 18:19:00 ip-publicip systemd[1]: ssh.service: Не удалось с результатом 'exit-code'.
Apr 23 18:19:00 ip-publicip systemd[1]: Не удалось запустить сервер OpenBSD Secure Shell.
Apr 23 18:19:00 ip-publicip systemd[1]: ssh.service: Время ожидания обслуживания истекло, назначается перезапуск.
Apr 23 18:19:00 ip-publicip systemd[1]: ssh.service: Запланирована задача перезапуска, счетчик перезапуска на уровне 5.
Apr 23 18:19:00 ip-publicip systemd[1]: Остановлен сервер OpenBSD Secure Shell.
Apr 23 18:19:00 ip-publicip systemd[1]: ssh.service: Запрос на запуск повторен слишком быстро.
Apr 23 18:19:00 ip-publicip systemd[1]: ssh.service: Не удалось с результатом 'exit-code'.
Apr 23 18:19:00 ip-publicip systemd[1]: Не удалось запустить сервер OpenBSD Secure Shell.
На самом деле в файле sshd_config
нет “разделов”.
В файле по умолчанию UsePAM
оказывается последней строкой файла, и поэтому обычно вы увидите блоки Match
, сразу следующие за ним. Правила для блоков Match
описаны в man sshd_config
:
Match Вводит условный блок. Если все критерии на строке Match выполнены, ключевые слова на следующих строках переопределяют те, что установлены в глобальном разделе файла конфигурации, до тех пор, пока не будет встречена другая строка Match или конец файла. Если ключевое слово встречается в нескольких блоках Match, которые удовлетворяют условиям, применяется только первый экземпляр ключевого слова.
Как мы выяснили, запустив сервер в режиме отладки с помощью sshd -d
, у вас есть как минимум одна дополнительная строка после UsePAM
в вашем файле sshd_config
, и, поместив свой блок Match перед этой строкой, sshd
пытается применить его внутри блока, что не разрешено (обратитесь снова к разделу Match
справочной страницы, чтобы увидеть подмножество разрешенных ключевых слов):
/etc/ssh/sshd_config строка 94: Директива 'PrintMotd' не разрешена внутри блока Match
Решение должно быть так же простым, как перемещение вашего блока Match
в истинный конец файла.
Ответ или решение
Ошибка "Failed to start OpenBSD Secure Shell server" после добавления пользователей в блок PAM в файле конфигурации sshd_config
может быть вызвана неправильной структурой файла конфигурации. Давайте подробно разберем возможные причины проблемы и ее решение.
Анализ проблемы
При добавлении следующих строк в файл sshd_config
:
UsePAM yes
Match User employee_1
PasswordAuthentication yes
пользователь сталкивается с ошибкой при попытке перезапустить SSH-сервер. Система сообщает, что служба SSH не может быть запущена из-за ошибки, связанной с выполнением команды sshd -t
, которая проверяет корректность конфигурации.
Ошибка при проверке конфигурации
Согласно журналам:
sshd_config line 94: Directive 'PrintMotd' is not allowed within a Match block
это сообщение об ошибке указывает на то, что в конфигурационном файле присутствует директива PrintMotd
, которая не разрешена внутри блока Match
.
Структура файла sshd_config
Файл sshd_config
не имеет настоящих "разделов", но использует директивы и блоки для управления поведением SSH-сервера. Блоки Match
служат для переопределения глобальных настроек, когда заданные критерии выполняются. Важно помнить, что если в блоке Match
присутствуют директивы, которые не допускаются (например, PrintMotd
), это приведет к сбою.
Решение проблемы
Решение заключается в правильном расположении блока Match
. Чтобы избежать конфликта между директивами, следует разместить ваш блок Match
в самом конце файла, после всех других директив. Таким образом, глобальные настройки будут применяться ко всем пользователям, за исключением тех, для которых определены особые условия в блоке Match
.
Пример правильного расположения в файле sshd_config
:
UsePAM yes
PrintMotd no
# Другие глобальные настройки ...
# Важно: Блок Match должен быть в конце
Match User employee_1
PasswordAuthentication yes
Заключение
После внесения соответствующих изменений в sshd_config
, вы сможете успешно перезапустить SSH-сервер с помощью следующей команды:
sudo systemctl restart ssh
Убедитесь, что проверки конфигурации выполняются корректно, с помощью:
sudo sshd -t
Это обеспечит, что конфигурация не содержит ошибок, и ваш SSH-сервер будет работать как задумано. Полное понимание структуры и правил конфигурации sshd_config
поможет избежать подобных ситуаций в будущем и обеспечит надежную работу сервера.