Короче говоря:
Хотел бы получить способ аутентификации по SSH-ключу через LDAP.
Проблема:
Мы используем LDAP (slapd) для служб каталогов, и недавно мы перешли на использование нашего собственного AMI для создания экземпляров. Причина, по которой бит AMI важен, состоит в том, что в идеале мы хотели бы иметь возможность войти в систему с помощью SSH с помощью аутентификации по ключу, как только экземпляр будет запущен, и не нужно ждать, пока наш несколько медленный инструмент управления конфигурацией запустит скрипт для добавления правильные ключи к экземпляру.
Идеальный сценарий заключается в том, что при добавлении пользователя в LDAP мы также добавляем его ключ, и он сразу же сможет войти в систему.
Аутентификация по ключу обязательна, потому что вход на основе пароля менее безопасен и утомителен.
Я прочитал этот вопрос, который предполагает, что есть патч для OpenSSH под названием OpenSSH-lpk, чтобы сделать это, но это больше не требуется с сервером OpenSSH> = 6.2
Добавлена опция AuthorizedKeysCommand sshd_config (5) для поддержки выборки авторизованных ключей из команды в дополнение (или вместо) из файловой системы. Команда запускается под учетной записью, указанной параметром AuthorizedKeysCommandUser sshd_config (5)
Как я могу настроить OpenSSH и LDAP для реализации этого?
AuthorizedKeysCommandUser nobody
вместо root.ldapsearch -u -LLL -o ldif-wrap=no '(&(objectClass=posixAccount)(uid='"$1"'))' 'sshPublicKey' | sed -n 's/^[ \t]*sshPublicKey:[ \t]*\(.*\)/\1/p'
AuthorizedKeysCommandRunAs
и нетAuthorizedKeysCommandUser
Для тех, кто получает ошибку при запуске ldapsearch:
как я и делал (во FreeBSD), исправление состоит в том, чтобы изменить первую команду sed на:
(добавляя точку с запятой после 'd').
источник
Я просто хотел поделиться своим «методом», моя клиентская часть специфична для Debian / Ubuntu, но моя серверная сторона в основном такая же, как указано выше, но с немного большим «HowTo:»
Сервер:
Включить атрибут открытого ключа:
Кредит:
https://blog.shichao.io/2015/04/17/setup_openldap_server_with_openssh_lpk_on_ubuntu.html
Теперь используйте это, чтобы добавить ldif:
Добавление пользователя с открытым ключом SSH в phpLDAPadmin
Сначала создайте пользователя с помощью шаблона «Generic: User Account». Затем перейдите в раздел атрибутов «objectClass», нажмите «Добавить значение» и выберите атрибут «ldapPublicKey». После отправки вернитесь на страницу редактирования пользователя, нажмите «Добавить новый атрибут» в верхней части и выберите «sshPublicKey», вставьте открытый ключ в текстовую область и, наконец, нажмите «Обновить объект». "
Атрибут sshPublicKey не отображается - OpenLDAP PHPLDAP SSH Key Auth
Клиент Ubuntu:
Создать тестовые ключи:
источник
Это не полный ответ, а дополнение к ответу c4urself . Я бы добавил это как комментарий, но у меня нет достаточной репутации, чтобы комментировать, поэтому, пожалуйста, не понижайте голос!
Это скрипт, который я использую для
AuthorizedKeysCommand
(на основе версии c4urself). Он работает независимо от того, возвращено ли значение в кодировке base64 или нет. Это может быть особенно полезно, если вы хотите хранить несколько авторизованных ключей в LDAP - просто разделите ключи символами новой строки, подобно файлу авторизованных ключей.источник