В Linux (например, Ubuntu 18.04), как я могу настроить sshd
разрешить вход с использованием открытых ключей для пользователей ОС, которые еще не существуют?
Например:
На сервере: / etc / ssh / sshd_config имеет AuthorizedKeysFile: /etc/ssh/keys/%u
sudo mkdir -p /etc/ssh/keys
sudo tee /etc/ssh/keys/foo <<< "$(cat id_rsa.pub)"
sudo systemctl restart sshd
На клиенте: ssh foo @ server
В этом сценарии на сервере НЕТ foo
счет в /etc/passwd
, но я бы хотел создать его автоматически, а затем использовать pam_mkhomedir
для создания своего домашнего каталога - все потому, что пользователь может успешно пройти аутентификацию с помощью открытого ключа.
Моя попытка:
/etc/pam.d/sshd
закомментировать @include common-auth
(не имеет значения, поскольку открытые ключи, как сообщается, все равно обходят это)
/etc/pam.d/sshd
закомментировать @include common-account
(нет разницы)
/etc/pam.d/sshd
добавить, под # 2, account required pam_permit.so
(нет разницы)
/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 в базе данных, вам не нужно регистрировать их на каждой рабочей станции.