Как я могу сделать так, чтобы пользователь мог войти в систему с помощью ключей SSH, но не с помощью пароля?

17

Я хотел бы создать пользователя и не иметь пароля. Как и вы не можете войти с паролем. Я хочу добавить ключи к его авторизованным ключам, используя root. Это для моей автоматической системы резервного копирования.

Джефф Шаллер
источник

Ответы:

26

Использование passwd -dнекорректно , по крайней мере в Fedora , в любом дистрибутиве Linux, основанном на shadow-utils. Если вы удаляете пароль с помощью passwd -d, это означает, что любой может войти в систему для этого пользователя (в консоли или графическом режиме), не вводя пароль.

Чтобы заблокировать вход в систему с парольной аутентификацией, запустите программу , которая заблокирует учетную запись, сделав ее доступной только для пользователя root. Блокировка выполняется путем преобразования зашифрованного пароля в недопустимую строку (с помощью префикса зашифрованной строки знаком!).passwd -l username

Любая попытка входа в систему, локальная или удаленная, приведет к «неправильному паролю» , в то время как вход с открытым ключом все еще будет работать. Учетная запись может быть разблокирована с .passwd -u username

Если вы хотите полностью заблокировать учетную запись, не удаляя ее, отредактируйте /etc/passwdи установите /sbin/nologinили /bin/falseв последнем поле. Это приведет к «Этот аккаунт в настоящее время недоступен». за любую попытку входа.

Пожалуйста, обратитесь к man-странице passwd (1).

Гвидо
источник
@guido: rvs не будет уведомлен о вашем ответе. Вы должны были бы добавить комментарий к его ответу для этого (я сделал это). Обратите внимание, что читатели могут прочитать ваш ответ до его, вы должны написать ответы, которые отвечают непосредственно на вопрос. Молодец, что указал на это! Это относится к большинству дистрибутивов Linux (которые используют теневые утилиты Linux).
Жиль "ТАК - перестань быть злым"
@ Жиль: извините, я новичок в stackexchange; я только немного указал на это, потому что это было похоже на предложение пользователям настраивать учетные записи без пароля, и это было принято и помечено как полезное ...
guido
@ Guido: Не беспокойтесь, я просто объяснял, как сделать ваше предупреждение более эффективным. На самом деле, в таких крайних случаях, когда ответ опасно неправильный, было бы целесообразно предложить редактирование с добавлением предупреждения или исправления (надеюсь, вы не встретите эти ситуации слишком часто на сайте).
Жиль "ТАК - перестань быть злым"
@guido: На самом деле, на Debian Squeeze (я не знаю о lenny или etch) этот ответ работает. Он не позволяет никому, кроме root, войти в систему, разрешить авторизацию ключей, но это не пароль меньше, он просто не принимает пароль. Я был удивлен, что вы можете «удалить пароль» и что он будет работать таким образом. Но он сделал именно то, что я хотел, и именно то, что делает этот ответ, и был единственным ответом, поэтому я просто принял его. Этот ответ имеет больше смысла, и я приму его, потому что я готов поспорить, что другие дистрибутивы позволяют любому войти в систему без пароля, в отличие от Debian. В любом случае хороший ответ.
1
@ acidzombie24, @mattdn: они могли бы удалить nullok из pam.d / password-auth, если бы Debian использовал pam (я так думаю, но я не эксперт по Debian). Тем не менее, справочная информация passwd (1) заявляет, что аргумент -d предназначен для создания учетных записей без пароля, поэтому любые специфические для дистрибутива предположения здесь вторичны, так как вопрос был очень общим.
Гидо
2

Разве вы не спрашиваете конкретно о демоне SSH, не принять аутентификацию на основе пароля, а аутентификацию по ключу / парольной фразе?

Ищите изменения в sshd_config.

Устанавливать

PasswordAuthentication No
PreferredAuthentications publickey,hostbased,keyboard-interactive
Protocol 2,1

Ищите дополнительные параметры конфигурации в man ssh_config

Никхил Мулли
источник
0

Просто не устанавливайте пароль для пользователя. Если пароль уже существует, удалите его с помощью passwd -l <username>.

Но было бы все еще возможно войти в систему как этот пользователь - с помощью авторизованного ключа или через su или sudo от некоторой привилегированной учетной записи.

RVS
источник
1
Как указывает Гвидо , passwd -dделает учетную запись без пароля, так как в нее можно войти без необходимости ввода пароля. Используйте passwd -lдля блокировки учетной записи (представьте, что вы вводите пароль, который невозможно ввести).
Жиль "ТАК - перестань быть злым"
Я добавил предупреждение к вашему сообщению, потому что оно опасно в его нынешнем виде. Я оставлю на ваше усмотрение решение, исправить ли ваш ответ, или удалить свой ответ (если вы считаете, что гвидо достаточно), или опровергнуть предупреждение.
Жиль "ТАК - перестань быть злым"
Почему люди принимают ответ, который даже не работает?
Mathepic
@mathepic: работает на Debian. Точно так, как я просил
Вы уверены, что непривилегированный пользователь не может suк пользователю?
Mattdm