Я работаю в среде, где у меня есть учетная запись на нескольких Linux-машинах, где учетные записи и пароли управляются независимо (нет активного каталога / LDAP / etc), а срок действия паролей истекает каждые 30 дней. Поэтому я подумал, что будет проще управлять моей аутентификацией с помощью ключей ssh. Я могу пройти аутентификацию, используя свои ключи ssh. Однако я обнаружил, что, когда срок действия моего пароля истекает, мне предлагается изменить пароль, когда я пытаюсь подключиться с помощью моего ключа ssh. Это нормальное поведение? Я думал, что весь смысл использования пар ключей состоит в том, чтобы обойти использование вашего пароля. Разве мне не нужно изменить пароль, только если я войду с паролем?
Вы все равно должны менять его каждые 30 дней.
Администратор может изменить это поведение, изменив максимальное количество дней, в течение которых пароль остается действительным, используя passwd -x
или chage -E
или даже usermod -e
.
Я наткнулся на решение этой проблемы из ссылки ниже. Решение требует авторизации для редактирования некоторых файлов pam
.
Причиной проблемы является порядок операций, который вызывает запрос пароля с истекшим сроком действия, как описано здесь:
- SSH запускает этап учетной записи PAM, который проверяет, что учетная запись существует и действительна. Этап учетной записи замечает, что срок действия пароля истек, и сообщает SSH.
- SSH выполняет аутентификацию на основе ключей. Для этого ему не нужен PAM, поэтому он не запускает этап аутентификации. Затем он устанавливает сеанс входа в систему SSH и запускает этап сеанса PAM.
- Затем SSH запоминает, что PAM сообщил ему, что срок действия пароля истек,печатает предупреждающее сообщение и просит PAM изменить пароль пользователя. Затем SSH отключается.
Более свежие версии pam_unix
имеют no_pass_expiry. На странице руководства:
no_pass_expiry
When set ignore password expiration as defined by the shadow entry of the user. The option has an effect
only in case pam_unix was not used for the authentication or it returned authentication failure meaning
that other authentication source or method succeeded. The example can be public key authentication in
sshd. The module will return PAM_SUCCESS instead of eventual PAM_NEW_AUTHTOK_REQD or PAM_AUTHTOK_EXPIRED.
На сервере CentOS 7 я установил /etc/pam.d/password-auth
и /etc/pam.d/system-auth
с следующие строки:
account required pam_unix.so no_pass_expiry
password sufficient pam_unix.so sha512 shadow nullok remember=5 no_pass_expiry
Ссылки
Пароль с истекшим сроком действия и логин на основе ключа SSH