OpenSSH 升级后 PAM 配置丢失

OpenSSH 升级后 PAM 配置丢失
问题现象升级 OpenSSH 后sshd 服务能正常启动、端口正常监听、配置文件检测无报错但远程 SSH 密码认证全部失败控制台登录正常。ssh -v 客户端日志显示 Sent password. Incoming packet: SSH2_MSG_USERAUTH_FAILURE Server requested: publickey,password根本原因执行rpm -e openssh*卸载旧版 RPM 包时RPM 包管理的不只是二进制文件还包括它安装时创建的配置文件其中就有/etc/pam.d/sshd。这个文件是 PAM可插拔认证模块的服务定义文件sshd 在UsePAM yes默认的情况下每次认证都要读取这个文件来决定走哪条认证链路。源码编译安装./configure make make install不会重新创建 PAM 配置文件因为 PAM 配置属于发行版集成层面的内容不属于 OpenSSH 源码包自身的安装范畴。结果就是旧版 RPM 删除了/etc/pam.d/sshd→ 新版 sshd 启动时找不到该文件 → 密码认证这一步因为 PAM 栈失效而必然失败但 sshd 本身、网络、配置语法检查全部正常所以表象具有很强的迷惑性。排查这个问题走的弯路排查方向结果教训检查端口、防火墙、安全组都正常这类问题先看认证日志比先查网络更高效检查 sshd_config 语法无报错sshd -t 只检查 sshd 自身配置不检查 PAM检查私钥权限、GSSAPI 选项已在更早步骤修复非本次原因容易和之前的报错混淆需要每次重新确认现象怀疑 UseDNS 超时排除真正卡点在认证阶段而非连接阶段怀疑密码本身错误排除su - root可正常切换控制台能登录、su 能成功已经能说明密码没问题该信号被发现得偏晚用sshd -d调试模式直接定位到 PAM 报错这是最快定位此类问题的方法应该更早使用关键定位手段真正定位到根因靠的是两步cat /etc/pam.d/sshd返回No such file or directory—— 直接暴露文件丢失/usr/sbin/sshd -d调试模式前台运行能实时打印 PAM 认证链路的详细报错是排查端口通、密码对、但登录失败这类问题最有效的手段比看/var/log/secure更直接标准解决方案bash# 重建标准 CentOS 7 的 sshd PAM 配置用 vi 手工编辑避免 heredoc 复制粘贴导致格式损坏 vi /etc/pam.d/sshd内容#%PAM-1.0 auth substack password-auth auth include postlogin account required pam_sepermit.so account required pam_nologin.so account include password-auth password include password-auth session required pam_selinux.so close session required pam_loginuid.so session required pam_selinux.so open env_params session optional pam_keyinit.so force revoke session include password-auth session include postloginbashsystemctl restart sshd通用经验教训适用于所有卸载旧 RPM 编译安装新版类升级rpm -e 删除的不只是程序本身还包括它创建的所有配置文件包括/etc/ssh/sshd_config、/etc/pam.d/sshd等这些文件源码编译安装都不会自动补回来必须人工核对清单。升级前应该完整备份的范围不只是/etc/ssh/还应该包括所有可能被 RPM 关联管理的配置目录比如bashmkdir -p /root/upgrade_backup cp -r /etc/ssh /etc/pam.d/sshd /etc/init.d/sshd /root/upgrade_backup/ 2/dev/null rpm -ql openssh openssh-server openssh-clients /root/upgrade_backup/rpm_filelist.txt提前导出rpm -ql文件清单卸载后逐一核对哪些文件消失了比事后排查快得多。端口通、密码对、配置语法无报错不等于认证链路完整PAM 是独立于 sshd_config 之外的认证层必须单独验证/etc/pam.d/sshd是否存在。排查认证类问题时sshd -d前台调试模式应该作为第一步而不是最后一步它能直接打印出 PAM、密钥交换、用户验证每一层的详细信息比反复猜测配置项更高效。heredoccat EOF在某些终端/远程工具下粘贴大段文本容易因换行符、特殊字符被截断或拼接错乱重建系统级配置文件时建议用vi手动编辑并逐行核对而不是依赖一次性粘贴。