我有许多 CentOS 5.x 和 RHEL 5.x 系统的 SSH 守护进程变得无响应。这阻止了远程登录。
连接侧的典型错误是:
$ ssh db1
db1 : ssh_exchange_identification: Connection closed by remote host
强制重启后检查/var/log/messages
显示重启前出现以下情况:
Dec 10 10:45:51 db1 sshd[14593]: fatal: Privilege separation user sshd does not exist
Dec 10 10:46:02 db1 sshd[14595]: fatal: Privilege separation user sshd does not exist
Dec 10 10:46:54 db1 sshd[14711]: fatal: Privilege separation user sshd does not exist
Dec 10 10:47:38 db1 sshd[14730]: fatal: Privilege separation user sshd does not exist
这些系统使用 LDAP 身份验证,并且nsswitch.conf
文件配置为首先查看本地“文件”。
[root@db1 ~]# cat /etc/nsswitch.conf
#
# /etc/nsswitch.conf
#
passwd: files ldap
shadow: files ldap
group: files ldap
hosts: files dns
这特权分离SSH 用户存在于本地密码文件中。
[root@db1 ~]# grep ssh /etc/passwd
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
您对根本原因有什么想法吗?我没有看到任何涉及此问题的 Red Hat 勘误表。
答案1
Debian 错误#552431听起来很相似。
受影响的系统是否比未受影响的系统执行更多的 LDAP 查询?例如,邮件服务器、LDAP 认证的 DB 服务器?
EL5 中的 nss-ldap 是设计不太好,它在 EL6 中被 nss-pam-ldapd 取代。您有或没有这个问题的 EL6 机器吗?
如果问题可重现,并且你有能力进行实验,我建议尝试ssd 的替换 nss_ldap 和 nscd。SSSD 位于 RHEL/CentOS 存储库中,可通过 yum 获得。注意:sssd 不会像 nscd 那样缓存主机,如果您在使用 sssd 时需要缓存主机名,则应使用缓存 DNS 服务器(dnsmasq 非常容易实现这一点)或使用 nscd 仅缓存主机。SSSD 会缓存用户/密码/组信息。
答案2
提醒一下。我也遇到过这种情况:
sshd[*]: fatal: Privilege separation user sshd does not exist
我在 SAMBA 设置期间犯了非常基本的错误:
passwd: winbind
group: winbind
shadow: files
至少应为:
passwd: files winbind
group: files winbind
shadow: files
smbcontrol all reload-config
缺少文件信息导致无法从本地文件获取信息(据我所知)。我认为这种错误的设置会影响用户没有人从而导致问题。
附言:请随意纠正我:)
答案3
建议 1:/var/empty/sshd 存在吗?它应该是 root 拥有的 755 权限目录。
建议2:/etc/passwd 文件中有任何错误吗?(例如,您运行过 pwck 吗?)
建议 3:尝试终止 nscd 守护进程。nscd 有一些错误,有时使用密码、组或主机信息的缓存无法正常工作。
建议4:/sbin/nologin 存在吗?