银河麒麟系统 OpenSSH 升级至 10.x 实战避坑指南
⚠️ 核心警告(操作前必读)
- 绝对不要关闭当前的 SSH 连接窗口! 必须保留一个已登录的旧会话作为“救生艇”,直到新终端测试连接成功为止,否则一旦配置错误将导致服务器失联。
- 银河麒麟特性: 在重启 SSH 服务前必须执行
systemctl daemon-reload,否则会出现服务状态异常或配置不生效的提示。- PAM 认证模块变更: 从 OpenSSH 10 以下版本升级,必须修改 PAM 加密模块配置(
pam_stack.so已被废弃),这是导致“密码正确却提示 Failed password”的通用致命错误。
第一步:升级前准备与备份
在操作前,务必备份当前的 SSH 配置文件,以便在出现问题时快速回滚。
# 备份 sshd 配置文件
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%F)
# 进入 RPM 包所在目录(假设放在 /root/openssh/)
cd /root/openssh/第二步:执行 RPM 升级
使用 rpm 命令直接进行升级安装:
sudo rpm -Uvh openssh-*.rpm第三步:修复 Host Key 权限(必做)
OpenSSH 10.x 对安全性要求极高,如果主机密钥(Host Key)权限过于宽松,sshd 将直接拒绝启动。执行以下命令修正权限和属主:
# 1. 确保私钥权限为 600
chmod 600 /etc/ssh/ssh_host_rsa_key
chmod 600 /etc/ssh/ssh_host_ecdsa_key
chmod 600 /etc/ssh/ssh_host_ed25519_key
# 2. 确保对应的公钥权限为 644
chmod 644 /etc/ssh/ssh_host_rsa_key.pub
chmod 644 /etc/ssh/ssh_host_ecdsa_key.pub
chmod 644 /etc/ssh/ssh_host_ed25519_key.pub
# 3. 确保属主正确
chown root:root /etc/ssh/ssh_host_*_key /etc/ssh/ssh_host_*_key.pub第四步:清理废弃配置项 (sshd_config)
OpenSSH 10 彻底移除了对 SSHv1 协议及相关古老加密算法的支持。旧配置文件中的某些选项会导致 sshd 报错。
💡 避坑经验:
报错提示的行号(如 155行、157行)并不固定。不要盲目按行号删除,一定要用sshd -t命令动态查看报错。
# 测试配置文件是否有语法错误或废弃选项
sudo sshd -t常见报错及修复方法:
报错 1: /etc/ssh/sshd_config line 157: Deprecated option RhostsRSAAuthentication
sudo sed -i '/^RhostsRSAAuthentication/d' /etc/ssh/sshd_config报错 2: /etc/ssh/sshd_config line 155: Deprecated option RSAAuthentication
sudo sed -i '/^RSAAuthentication/d' /etc/ssh/sshd_config修复后,再次执行 sudo sshd -t,如果没有任何输出,则说明配置文件已完全合法。
第五步:重载配置与启动服务(麒麟系统关键步)
在银河麒麟系统中,由于 systemd 单元文件或 init 脚本发生了变更,必须重载 daemon 配置。
# 1. 重载 systemd 管理器配置(银河麒麟必做!)
sudo systemctl daemon-reload
# 2. 启动/重启 sshd 服务
sudo systemctl restart sshd.service
# 3. 查看服务运行状态
sudo systemctl status sshd.service确认状态为 active (running) 且 22 端口正常监听。
第六步:修复 PAM 认证模块(🔥 核心重点)
这是从 10 以下版本升级必须修改的部分!
旧版系统使用 pam_stack.so,而该模块在现代系统中已被移除。如果不修复,查看日志(journalctl -xeu sshd)会看到 PAM unable to dlopen(/usr/lib64/security/pam_stack.so),导致即使密码正确也无法登录。
# 1. 备份旧的 PAM 配置
sudo cp /etc/pam.d/sshd /etc/pam.d/sshd.bak.$(date +%F)
# 2. 写入 OpenSSH 10 兼容的标准 PAM 配置
sudo tee /etc/pam.d/sshd << 'EOF'
#%PAM-1.0
auth required pam_sepermit.so
auth substack password-auth
auth include postlogin
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 optional pam_keyinit.so force revoke
session include password-auth
session include postlogin
session required pam_selinux.so open env_params
EOF第七步:最终验证
1. 验证版本:
ssh -V预期输出应包含 OpenSSH_10.x 字样。
2. 验证连接(关键):
新开一个终端窗口,尝试 SSH 登录服务器。
- 如果能成功输入密码并进入系统 $\rightarrow$ 升级成功。
- 如果提示
Permission denied或连接断开 $\rightarrow$ 立即回到保留的旧终端窗口,检查/etc/pam.d/sshd内容是否写入正确,或恢复备份文件。
📝 总结与排错心得
- 关于报错行号:
sshd -t报出的行号只是参考,核心是看它提示Deprecated option后面的参数名,用sed精准删除即可。 - 关于通用错误:
pam_stack.so缺失是跨大版本升级的“通用错误”,只要是从低版本升到 10.x,这个 PAM 配置文件必须替换。 - 关于 systemctl 警告: 如果启动时提示
Warning: The unit file... changed on disk,不要慌,这只是提醒你执行systemctl daemon-reload,执行后重启服务即可消除。 - 底线原则: 只要不关闭老的 SSH 会话,哪怕配置改错了、服务起不来,你依然有权限在旧窗口里把备份文件还原,从容救场。
评论 (0)