Назад | Перейти на главную страницу

AuthorizedKeysCommand не выполняется

Я пытаюсь авторизовать сеансы 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 для получения дополнительной информации).