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

ssh-вход с использованием открытых ключей для пользователей, которые (пока) не существуют

В Linux (например, Ubuntu 18.04), как я могу настроить sshd разрешить вход с использованием открытых ключей для пользователей ОС, которые еще не существуют?

Например:

  1. На сервере: / etc / ssh / sshd_config имеет AuthorizedKeysFile: /etc/ssh/keys/%u

  2. sudo mkdir -p /etc/ssh/keys

  3. sudo tee /etc/ssh/keys/foo <<< "$(cat id_rsa.pub)"

  4. sudo systemctl restart sshd

  5. На клиенте: ssh foo @ server

В этом сценарии на сервере НЕТ foo счет в /etc/passwd, но я бы хотел создать его автоматически, а затем использовать pam_mkhomedir для создания своего домашнего каталога - все потому, что пользователь может успешно пройти аутентификацию с помощью открытого ключа.

Моя попытка:

  1. /etc/pam.d/sshd закомментировать @include common-auth (не имеет значения, поскольку открытые ключи, как сообщается, все равно обходят это)

  2. /etc/pam.d/sshd закомментировать @include common-account (нет разницы)

  3. /etc/pam.d/sshd добавить, под # 2, account required pam_permit.so (нет разницы)

  4. /etc/ssh/sshd_config LogLevel: DEBUG3 показывает

debug1: userauth-request for user foo 
Invalid user foo from 192.168.0.8 port 62083
debug1: PAM: initializing for "foo"
debug1: userauth_pubkey: test whether pkalg/pkblob are acceptable for RSA SHA256:kdI+ALYK88R6zAcoPAIyXctjCLgEkGodgieusIOay0c [preauth]
debug2: userauth_pubkey: disabled because of invalid user [preauth]

Ответ прост: вы не можете этого сделать, не написав собственный плагин для PAM.

В зависимости от потребностей вашего бизнеса, может иметь больше смысла подключить устройство к бэкэнду LDAP для пользовательской базы данных.

Чтобы получить более конкретную информацию, sshd будет обращаться к PAM для аутентификации пользователя. Если в базе данных пользователей нет записи, пользователь будет установлен на unknown, который создаст кошмар для пользователя. Кроме того, нет знакомого мне модуля PAM, который будет принимать имя пользователя, предоставленное sshd и создать запись об этом в passwd.

FreeIPA вместе с SSSD может быть правильным ответом на ваш вопрос: храните базу данных пользователей в одном месте (FreeIPA) и позвольте рабочей станции обращаться к ней (SSSD) для получения информации о пользователях и создавать для них домашние каталоги на лету (pam_mkhomedir). FreeIPA даже позволяет хранить открытые ключи ssh в базе данных, вам не нужно регистрировать их на каждой рабочей станции.