配置MachineA至MachineB无密码SSH失败,遇PAM权限错误求助
搞定SSH无密码登录被PAM拒绝的问题
嘿,我来帮你排查这个问题!你遇到的fatal: Access denied for user golden by PAM account configuration [preauth]错误,核心是PAM的账户安全规则把你的登录请求给拦了——哪怕你已经把公钥加到了authorized_keys里,PAM的权限校验优先级更高。结合你提到的配置,咱们从这几个方向找问题:
1. 先查/etc/security/access.conf的规则
PAM的pam_access.so模块靠这个文件的规则决定谁能登录,常见坑点:
- 有没有明确拒绝golden从MachineA登录的规则?比如类似这样的行:
-:golden:192.168.x.x(这里的IP是MachineA的地址) - 规则顺序搞反了?这个文件是从上到下匹配,碰到第一条符合的就停。如果先写了
-:ALL:ALL(拒绝所有),再写允许golden的规则,那第一条就直接把请求拦了,后面的规则根本不会生效。 - 没给golden开权限?如果你的规则里只允许了特定用户登录,却没加golden的允许条目,或者默认规则是拒绝,那自然登不进去。
2. 检查SSH的PAM配置文件/etc/pam.d/sshd
SSH服务的PAM规则都在这儿,重点看:
- 是不是启用了
pam_access.so?如果有account required pam_access.so这行,说明access.conf的规则会强制生效;哪怕是account sufficient pam_access.so,它也会参与校验。 - 有没有其他PAM模块搞事情?比如
pam_listfile.so(按文件名单限制)、pam_time.so(按时间限制)这些,也可能导致golden的登录被拒。
3. 确认golden用户的账户状态没问题
- 账户有没有被锁定?执行
passwd -S golden,输出里要是有L标记,说明账户锁了,用passwd -u golden解锁就行。 - 登录shell是不是有效的?看
/etc/passwd里golden的条目,比如golden:x:1001:1001::/home/golden:/bin/bash,确保shell是/bin/bash、/bin/sh这类能正常登录的,要是是/sbin/nologin或/bin/false,默认SSH会直接拒掉。
4. 再核对一遍文件权限(别小看这个!)
虽然你提了权限设置,但还是再确认下:
- MachineB上
/home/golden/.ssh目录权限必须是700,执行chmod 700 /home/golden/.ssh authorized_keys文件权限必须是600,执行chmod 600 /home/golden/.ssh/authorized_keys- 这些文件和目录的所有者必须是golden,执行
chown -R golden:golden /home/golden/.ssh
权限太松的话,SSH服务会拒绝,同时也可能触发PAM的安全校验。
快速测试方法
你可以先在/etc/security/access.conf最顶部加一条允许规则试试:
+:golden:MachineA的IP地址或主机名
然后重启SSH服务:systemctl restart sshd,再从MachineA的jenkins用户登录MachineB的golden用户。如果能登进去,说明问题就出在access.conf的规则上,再慢慢调整其他规则就行。
内容的提问来源于stack exchange,提问作者david




