在我正在初始化的虚拟机上,我能够以一个非 root 用户身份 ( admin
) 登录,但不能以另一个非 root 用户身份 ( tbbscraper
) 通过公钥身份验证通过 SSH 登录。我在任何日志文件中都能找到的唯一错误消息是
Sep 18 17:21:04 [REDACTED] sshd[18942]: fatal: Access denied for user tbbscraper by PAM account configuration [preauth]
在客户端,这种综合症是
$ ssh -v -i [REDACTED] tbbscraper@[REDACTED]
...
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering public key: [REDACTED]
debug1: Authentications that can continue: publickey
debug1: Trying private key: [REDACTED]
debug1: read PEM private key done: type RSA
Connection closed by [REDACTED]
将“tbbscraper”更改为“admin”可以成功登录:debug1: Authentication succeeded (publickey).
而不是出现“连接已关闭”消息。
这似乎不是一个权限问题......
# for x in admin tbbscraper
> do ls -adl /home/$x /home/$x/.ssh /home/$x/.ssh/authorized_keys
> done
drwxr-xr-x 3 admin admin 4096 Sep 18 17:19 /home/admin
drwx------ 2 admin admin 4096 Sep 18 16:53 /home/admin/.ssh
-rw------- 1 admin admin 398 Sep 18 17:19 /home/admin/.ssh/authorized_keys
drwxr-xr-x 3 tbbscraper tbbscraper 4096 Sep 18 17:18 /home/tbbscraper
drwx------ 2 tbbscraper tbbscraper 4096 Sep 18 17:18 /home/tbbscraper/.ssh
-rw------- 1 tbbscraper tbbscraper 398 Sep 18 17:18 /home/tbbscraper/.ssh/authorized_keys
# cmp /home/{admin,tbbscraper}/.ssh/authorized_keys ; echo $?
0
... 也不是 PAM 级别的访问控制问题...
# egrep -v '^(#|$)' /etc/security/*.conf
#
... 因此,对类似问题的现有答案似乎都不适用。我得到的唯一其他证据是:
root@[REDACTED] # su - admin
admin@[REDACTED] $
但
root@[REDACTED] # su - tbbscraper
su: Authentication failure
(Ignored)
tbbscraper@[REDACTED] $
这表明存在一些更大规模的 PAM 问题,但我找不到其中任何明显的错误/etc/pam.d
。有什么想法吗?
VM 是一个 EC2 实例,操作系统是 Debian 7.1(亚马逊的现成 AMI)。
答案1
经过所有这些,结果发现这是一个字符的拼写错误/etc/shadow
。找出不同之处:
admin:!:15891:0:99999:7:::
tbbscraper:!::15966:0:99999:7:::
没错,该tbbscraper
行的感叹号后面有两个冒号。这会将所有字段推到一起,让 PAM 认为该帐户已于 1970 年 1 月 8 日到期。
答案2
感谢您发布您的问题。我遇到了同样的错误,但我的问题与影子文件无关。我找到了解决办法,并想发布一个答案,供其他在 Google 上搜索此错误的人参考。这个 serverfault 问题首先出现。
尝试检查一下/etc/security/access.conf
!
我们使用 Active Directory 进行身份验证,但我需要以本地非 AD 用户 (jenkins) 身份登录。我的老板最初在以下行中设置了该框/etc/security/access.conf
:
+:root:ALL
-:ALL:ALL
我将其更改为以下内容,登录现在可以正常工作;我甚至不需要重新启动任何服务。
+:jenkins:ALL
+:root:ALL
-:ALL:ALL
答案3
就我而言,我当时正在重命名本地 CentOS 6 用户,但忘记在 /etc/shadow 中重命名他们(这些用户是无密码密钥认证的,我并没有想到),因此新用户名的记录在 /etc/shadow 中不存在。在 /var/log/secure 中,它给出了 unix_chkpwd 错误和 PAM 拒绝访问:
unix_chkpwd[12345]: could not obtain user info (user2)
sshd[12354]: fatal: Access denied for user user2 by PAM account configuration
答案4
我今天早上遇到了同样的问题,但服务器根据 Active Directory 对用户进行身份验证。结果发现用户的域密码已过期。