使用 ssh 密钥时强制更改过期密码

使用 ssh 密钥时强制更改过期密码

我的工作环境是,我在多台 Linux 机器上拥有一个帐户,这些机器上的帐户和密码是独立管理的(没有活动目录/LDAP/等),密码每 30 天过期一次。因此,我认为使用 ssh 密钥管理身份验证会更容易。我能够使用我的 ssh 密钥顺利进行身份验证。但是,我发现当我的密码过期时,当我尝试使用我的 ssh 密钥进行连接时,系统会提示我更改密码。这是正常现象吗?我认为使用密钥对的全部意义在于绕过使用密码。难道我不应该只在使用密码登录时才提示我更改密码吗?

答案1

我偶然从下面的参考资料中找到了此问题的解决方案。该解决方案需要授权才能编辑某些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 密钥的登录

pam_unix 手册页

答案2

passwd -x您仍然需要每 30 天更改一次。管理员可以更改此行为,通过使用或chage -E甚至 来更改密码保持有效的最大天数usermod -e

相关内容