银河麒麟系统 OpenSSH 升级至 10.x 实战避坑指南
银河麒麟系统 OpenSSH 升级至 10.x 实战避坑指南
2026-08-10 0 评论 1 阅读 0 点赞

银河麒麟系统 OpenSSH 升级至 10.x 实战避坑指南

daimafengzi
2026-08-10 / 0 评论 / 1 阅读 / 正在检测是否收录...

银河麒麟系统 OpenSSH 升级至 10.x 实战避坑指南

⚠️ 核心警告(操作前必读)

  1. 绝对不要关闭当前的 SSH 连接窗口! 必须保留一个已登录的旧会话作为“救生艇”,直到新终端测试连接成功为止,否则一旦配置错误将导致服务器失联。
  2. 银河麒麟特性: 在重启 SSH 服务前必须执行 systemctl daemon-reload,否则会出现服务状态异常或配置不生效的提示。
  3. 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

评论 (0)

取消