Я пытаюсь авторизовать сеансы SSH с помощью AuthorizedKeysCommand
в sshd_config
. По какой-то причине AuthorizedKeysCommand
не выполняется, даже если поток SSH хотя бы инициирует AuthorizedKeysCommand
течь.
Вот мой AuthorizedKeysCommand
конфигурация из моего /etc/ssh/sshd_config
:
AuthorizedKeysCommand /usr/local/src/authorized_keys_command.sh
AuthorizedKeysCommandUser nobody
Я изменил LogLevel
к DEBUG
и заметил в журналах следующее:
debug1: temporarily_use_uid: 65534/65534 (e=0/0)
debug1: restore_uid: 0/0
debug1: temporarily_use_uid: 65534/65534 (e=0/0)
debug1: restore_uid: 0/0
Это означает, что демон SSH переключается на пользователя nobody
, но после этого ничего не делает.
У меня есть следующие строки в моем authorized_keys_command.sh
сценарий:
#!/bin/bash -e
echo "Invoked AuthorizedKeysCommand"
if [ -z "$1" ]; then
echo "No User Specified"
exit 1
fi
echo "Username : $1"
Я даже попытался отладить проблему, передав /bin/echo
и /bin/date
к AuthorizedKeysCommand
но безрезультатно.
Моя конфигурация следующая: Операционная система: Ubuntu 16.04.1 LTS
(со всеми последними исправлениями и обновлениями из репозиториев apt (ubuntu)) OpenSSH Server: OpenSSH_7.2p2 Ubuntu-4ubuntu2.1, OpenSSL 1.0.2g 1 Mar 2016
Что я здесь делаю не так?
Страница руководства для sshd_config
довольно четко заявляет, что ожидается от команды для выполнения и вывода:
AuthorizedKeysCommand
Задает программу, которая будет использоваться для поиска открытых ключей пользователя. Программа должна принадлежать пользователю root, не иметь права записи для группы или других лиц и указываться по абсолютному пути.
Аргументы для AuthorizedKeysCommand могут быть предоставлены с использованием следующих токенов, которые будут расширены во время выполнения: %% заменяется литералом '%',% u заменяется именем пользователя, которое аутентифицируется,% h заменяется домашним каталогом пользователя при аутентификации% t заменяется типом ключа, предлагаемым для аутентификации,% f заменяется отпечатком ключа, а% k заменяется ключом, предлагаемым для аутентификации. Если аргументы не указаны, будет предоставлено имя целевого пользователя.
Программа должна выдавать на стандартный вывод ноль или более строк
authorized_keys
вывод (видеть AUTHORIZED_KEYS вsshd(8)
). Если ключ, предоставленный AuthorizedKeysCommand, не проходит успешно аутентификацию и авторизацию пользователя, тогда аутентификация открытого ключа продолжается с использованием обычных файлов AuthorizedKeysFile. По умолчанию AuthorizedKeysCommand не запускается.
Так что да, date
и echo
вы пытались написать в своей команде, скорее всего, игнорируются как нежелательный / недопустимый вывод. Если вы хотите, чтобы это авторизовало вашего пользователя, вам понадобится скрипт для создания открытого ключа в ожидаемом формате (см. Страницу руководства для sshd
для получения дополнительной информации).