news 2026/7/1 11:34:22

OpenSSH 升级后 PAM 配置丢失

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 报错这是最快定位此类问题的方法,应该更早使用
关键定位手段

真正定位到根因靠的是两步:

  1. cat /etc/pam.d/sshd返回No such file or directory—— 直接暴露文件丢失
  2. /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 postlogin

bash

systemctl restart sshd
通用经验教训(适用于所有"卸载旧 RPM + 编译安装新版"类升级)
  1. rpm -e 删除的不只是程序本身,还包括它创建的所有配置文件(包括/etc/ssh/sshd_config/etc/pam.d/sshd等),这些文件源码编译安装都不会自动补回来,必须人工核对清单。
  2. 升级前应该完整备份的范围不只是/etc/ssh/,还应该包括所有可能被 RPM 关联管理的配置目录,比如:

bash

mkdir -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文件清单,卸载后逐一核对哪些文件消失了,比事后排查快得多。

  1. "端口通、密码对、配置语法无报错"不等于认证链路完整,PAM 是独立于 sshd_config 之外的认证层,必须单独验证/etc/pam.d/sshd是否存在。
  2. 排查认证类问题时,sshd -d前台调试模式应该作为第一步而不是最后一步,它能直接打印出 PAM、密钥交换、用户验证每一层的详细信息,比反复猜测配置项更高效。
  3. heredoc(cat << EOF)在某些终端/远程工具下粘贴大段文本容易因换行符、特殊字符被截断或拼接错乱,重建系统级配置文件时建议用vi手动编辑并逐行核对,而不是依赖一次性粘贴。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 11:33:28

MCP73827线性充电管理芯片:原理、设计与应用全解析

1. 从“万能充”到专用芯片&#xff1a;为什么我们需要MCP73827&#xff1f;十几年前&#xff0c;给手机充电&#xff0c;你可能需要一块“万能充”&#xff0c;夹着电池&#xff0c;看着指示灯从红变绿。那时候&#xff0c;充电管理基本靠“感觉”和“运气”&#xff0c;过充、…

作者头像 李华
网站建设 2026/7/1 11:32:36

ComfyUI-Impact-Pack完整指南:AI绘画细节增强的终极解决方案

ComfyUI-Impact-Pack完整指南&#xff1a;AI绘画细节增强的终极解决方案 【免费下载链接】ComfyUI-Impact-Pack Custom nodes pack for ComfyUI This custom node helps to conveniently enhance images through Detector, Detailer, Upscaler, Pipe, and more. 项目地址: ht…

作者头像 李华
网站建设 2026/7/1 11:31:36

dsPIC33/PIC24 PTG模块与节能模式协同设计实战指南

1. 项目概述&#xff1a;深入dsPIC33/PIC24的PTG与节能模式 最近在做一个电机控制的项目&#xff0c;主控用的是Microchip的dsPIC33系列&#xff0c;为了优化系统功耗和实现复杂的定时逻辑&#xff0c;我把它的PTG&#xff08;可编程定时器发生器&#xff09;模块和节能模式给彻…

作者头像 李华
网站建设 2026/7/1 11:30:54

基于多策略解析引擎的浏览器视频下载助手技术解析

基于多策略解析引擎的浏览器视频下载助手技术解析 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 在当今互联网环境中&#xff0c;视频内容已…

作者头像 李华
网站建设 2026/7/1 11:30:41

飞讯云WMS前台SQL注入漏洞实战:从原理到修复

1. 项目概述&#xff1a;一次典型的前台SQL注入漏洞挖掘与修复实战最近在参与一个内部攻防演练项目时&#xff0c;我遇到了一个非常典型的案例&#xff1a;飞讯云WMS&#xff08;仓储管理系统&#xff09;中存在的多处前台SQL注入漏洞。这个案例之所以值得拿出来分享&#xff0…

作者头像 李华
网站建设 2026/7/1 11:30:22

塞尔达传说旷野之息存档编辑指南:三步打造完美游戏体验

塞尔达传说旷野之息存档编辑指南&#xff1a;三步打造完美游戏体验 【免费下载链接】BOTW-Save-Editor-GUI A Work in Progress Save Editor for BOTW 项目地址: https://gitcode.com/gh_mirrors/bo/BOTW-Save-Editor-GUI 想要在《塞尔达传说&#xff1a;旷野之息》中轻…

作者头像 李华