资讯动态

国产麒麟离线环境一键升级OpenSSH:从依赖到回滚的完整脚本方案

发布时间:2026/10/15 18:55:07 来源:尧图企业网站定制
简介面向国产麒麟操作系统及 CentOS 的运维人员这份资料提供了一套离线环境中一键升级 OpenSSH 及相关安全组件的完整方案。通过自带的 update.sh 脚本将 OpenSSL 3.2.0、OpenSSH 9.7p1、zlib 1.3.1 三个源码包自动完成配置、编译与替换全程无需联网特别适合内网机房、涉密环境以及生产服务器等网络受限场景可有效补齐已知安全漏洞避免手工升级因依赖缺失或顺序错误导致服务异常。资源包共包含 4 个文件3 个为源码压缩包分别对应加密库、SSH 工具与压缩库另 1 个为可执行脚本整体大小约 20.04MB便于离线拷贝与批量部署。已有 2090 人学习下载适合系统管理员、运维工程师在麒麟或 CentOS 环境下维护 SSH 安全连接时参考使用是提升系统安全性与稳定性的实用工具尤其适用于互联网受限或内网隔离的运维现场。1. 离线升级 OpenSSH在国产麒麟上为什么最稳妥的办法是一键脚本等保整改现场扫描报告列出一排 OpenSSH 中危漏洞可这批国产麒麟服务器全在内网隔离区别说 apt 源连 yum 源都指向一个永远 ping 不通的地址。拿 U 盘拷几个 rpm 进去直接rpm -Uvh运气好版本号变了运气差 sshd 起不来而你人还在机房坐在地上拿串口慢慢排查。OpenSSH 升级从来不是替换一个可执行文件那么简单它背后挂着 OpenSSL、PAM、Zlib 一整条依赖链离线环境下稍有偏差就是一场连坐事故。这篇文章要讲的是一套不依赖外网、不依赖图形界面、甚至不依赖网管在旁辅助的离线一键升级方案从系统识别、依赖收集、脚本封装到回滚验证每一层都剥开讲透新手能照着做熟手能拿去做批量交付。2. 升级前准备离线环境下 OpenSSH 的依赖链先摸清系统底细很多人把离线升级理解成“把包拷进去按顺序装”结果装了十个包坏了九个。OpenSSH 和别的服务不太一样它对 OpenSSL 的 ABI 极其敏感。新版本 openssh 编译时链接的是某个具体版本的 libcrypto系统里如果只有另一套 libcryptossh 和 sshd 会直接启动失败连错误提示都很模糊。所以在写任何脚本之前必须先把目标机器的发行版、CPU 架构、现有 OpenSSL 版本这三件事搞清楚。这一步不依赖外网三条命令就能完成但每一条输出的含义都值得细看。2.1 先用三条命令确定架构、发行版和现有版本我在接到一台陌生的国产麒麟机器时第一件事不是打开目录翻安装包而是把下面三条命令的输出原样保存到一个文件里cat /etc/os-release uname -m ssh -V 21; openssl version第一条命令里的ID、VERSION_ID决定了你后面装的包是 RPM 还是 DEB。国产麒麟不同分支差异很大有的基于 RPM有的基于 DPKG如果不先识别后面脚本里的包管理器命令全部会打偏。第二条命令uname -m输出的是硬件架构常见是x86_64但国产化机器里aarch64很常见。下载安装包时必须选相同架构的版本rpm 包里写死了x86_64或aarch64标签架构不匹配时rpm -i会直接拒绝安装。第三条命令同时输出 openssh 和 openssl 版本这是升级前的基线也是漏洞整改报告里需要填写的“修复前版本”。除了版本号还要看动态链接库的现状ldd /usr/sbin/sshd | grep -E ssl|crypto|zlib|pam执行结果会列出 sshd 启动时实际加载的动态库路径。有些不是标准路径比如/usr/local/lib64/libcrypto.so.1.1这种系统往往是历史上有过第三方编译安装升级时不能只看 rpm 包否则新 sshd 加载了旧库表面升级实际没变。2.2 安装包收集在相同架构的联网环境拉取全套 RPM目标机器不联网总得有一台能联网的机器做“采购员”。这台机器的架构、系统大版本必须和目标机接近否则收集到的包会带上错误的依赖标签。我通常在联网机上用 yumdownloader 一次拉全yum install -y yum-utils # yumdownloader 所在包 mkdir -p /opt/ssh-upgrade cd /opt/ssh-upgrade yumdownloader --resolve openssh openssh-server openssh-clients yumdownloader --resolve openssl openssl-libs zlib pam--resolve的作用是自动把依赖链上的包一并下载不加它你只能拿到 openssh 主包等到了目标机器上安装时报“Failed dependencies”又得回头找。下载完成后目录里会有十几个甚至二十几个 rpm其中既有openssh-8.x-x.el7.x86_64.rpm也有openssl-libs-1.1.1x-x.el7.x86_64.rpm。注意 zlib 和 pam 的包也一起拉新版本 openssh 编译时往往依赖较新的 pam 接口只升级 openssh 不升级 pam 容易触发 5.3 节那种 PAM 失败。如果目标机器连 base 仓库都没有手里只有上一批次安装介质那就要用rpm -qpR反向查依赖rpm -qpR /opt/ssh-upgrade/openssh-server-*.rpm这个命令列出“这个 rpm 安装时需要哪些符号”比如输出里出现libcrypto.so.10()(64bit)说明系统必须有名为libcrypto.so.10的库。若本地ls /usr/lib64/libcrypto*看到只有.so.1.1说明匹配没到位还要去找到对应的openssl-libs包。按这个方式一个个补虽然繁琐但能避免“拷了三十个包回去发现核心库没带”。2.3 依赖顺序的两个原则库先行、版本配套离线安装 RPM 时rpm 命令本身不会自动为你去装依赖它只会检查依赖是否存在。所以安装顺序只能靠人控制。原则很简单先装动态库再装可执行程序。具体来说openssl-libs、zlib、pam属于动态库层必须在openssh-server、openssh-clients之前装。库层的包内部也有先后openssl-libs要先于openssl因为openssl命令行工具也依赖libcrypto.so。版本配套是另一个容易踩的坑。比如系统当前 openssl-libs 是 1.1.1c而你下载的 openssh 8.7 要求 openssl-libs 1.1.1f这时不能只升级 openssh必须把 openssl-libs 一起升级。反过来openssl-libs 升级到过新的版本又会让系统里其他依赖旧 ABI 的程序报错。所以最稳妥的做法是到同一个系统仓库的 update 目录里选同一批发布的 openssh 与 openssl 包而不是从网上任意找源码编译包。宁可多花时间在收集阶段也不要在安装阶段拼人品。3. 一键升级脚本的设计思路备份、安装、校验三段式留好回滚退路把“升级”封装成一个脚本表面看只是把一串 rpm 命令排好序实际上考验的是对事故的预判。离线升级 OpenSSH 最大的风险不在 rpm 本身而在升级过程对现有服务的影响配置文件被覆盖、会话中断、SELinux 上下文错乱。这三类事故发生时如果手里没有备份就只能拿存储里的快照恢复一台还好几十台就成灾难现场了。所以脚本的核心不是安装逻辑而是“先备份、再安装、安装完必须校验校验不过立刻恢复”。3.1 为什么脚本里必须包含配置备份而不是简单 rpm -Uvhrpm 升级包时有自己的配置保留策略一般会在包内声明%config(noreplace)升级时如果目标文件被修改过它会生成.rpmnew文件而不是直接覆盖。但这个机制要求包作者老老实实标记配置文件实际拿到的第三方打包的 openssh rpm很多没有做好标记直接就把/etc/ssh/sshd_config覆盖成默认内容。默认内容里PermitRootLogin no、PasswordAuthentication no重启 sshd 后你连门都进不去。另一个必须备份的是 PAM 目录和 SSH 主机密钥。主机密钥/etc/ssh/ssh_host_rsa_key如果被重新生成客户端会出现 host key 变化警告运维平台上配置的跳板机会全部失效。备份命令其实很简单重点是要“完整”和“可恢复”BACKUP_DIR/root/backup_ssh_$(date %Y%m%d_%H%M%S) mkdir -p $BACKUP_DIR cp -a /etc/ssh $BACKUP_DIR/ssh_conf_backup cp -a /etc/pam.d $BACKUP_DIR/pam_d_backup rpm -qa | grep -E openssh|openssl $BACKUP_DIR/old_packages.txtcp -a保留属主、权限和软链接比cp -r更可靠。old_packages.txt记录了升级前的包版本一旦需要降级它就是最直接的参考。注意这里我没有备份/etc/passwd、/etc/shadow因为升级 openssh 本身不会动账户体系除非 pam 关联异常否则不需要全套备份。3.2 按依赖顺序封装 rpm 安装区分升级和覆盖安装安装阶段最容易犯的错是把所有 rpm 一次传给rpm -Uvh然后听天由命。正确的做法是把包分成两组第一组是动态库层第二组是 openssh 本体。组内按依赖关系再排一次序。我的脚本骨架是rpm -Uvh --replacefiles --replacepkgs \ $PKG_DIR/openssl-libs-*.rpm \ $PKG_DIR/openssl-*.rpm \ $PKG_DIR/zlib-*.rpm \ $PKG_DIR/pam-*.rpm rpm -Uvh --replacefiles --replacepkgs \ $PKG_DIR/openssh-*.rpm--replacefiles允许安装时覆盖其他包持有的相同文件离线环境下因为手动收集包经常遇到两个 rpm 里包含同一个/etc/pam.d/sshd或/etc/ssh/moduli不带这个参数会报“file conflicts”。--replacepkgs是允许把已安装的同版本包再装一遍这个参数用在回滚场景更多平时升级不需要。有一点要特别说明我建议不要加--nodeps。加--nodeps虽然能强行装完但会让系统带病工作后面 libcrypto 库对不上时连原因都查不清。宁可让 rpm 报错停下来然后回头补包也不要带着隐患上线。安装完成后rpm -Uvh不会自动重启 sshd 服务而是只覆盖二进制文件。这其实是个安全窗口你还有机会执行sshd -t确认配置合法后再手动重启。3.3 校验动作是最后一道防线升级脚本的最后一步不能是echo done必须是真正的配置校验。sshd -t会用当前二进制读取配置文件检查语法和权限能发现大部分异常。校验失败时脚本应当立即把备份的配置恢复到/etc/ssh/并提示人工介入而不是继续重启服务。校验通过后也不要在脚本里自动systemctl restart sshd除非你现在就坐在服务器前面、手里有串口或 iLO 备用通道。远程升级时自动重启 sshd一旦配置有问题当前 SSH 会话立刻断掉而你剩下的登录通道可能就是这台机箱上的 VGA 接口。4. 麒麟离线一键升级 OpenSSH 的脚本实现与执行细节前面把原理拆完这里给一个能直接跑的完整脚本。它做的事情是接收一个 rpm 包目录参数检查当前权限和系统信息备份关键目录按依赖顺序安装最后用sshd -t做校验。脚本会把整个过程写到日志文件即使会话中断也能事后追踪。4.1 完整脚本检测、备份、安装、二次校验#!/usr/bin/env bash # 国产麒麟离线一键升级 OpenSSH 及相关文件 # 用法: bash upgrade_ssh_kylin.sh /path/to/rpm_dir set -euo pipefail PKG_DIR${1:?请传入 RPM 包所在目录} LOG_FILE/var/log/upgrade_ssh_kylin.log BACKUP_DIR/root/backup_ssh_$(date %Y%m%d_%H%M%S) # 所有输出同时写入日志和终端 exec (tee -a $LOG_FILE) 21 echo [1/6] 检查权限 if [ $(id -u) -ne 0 ]; then echo 必须以 root 运行普通用户没有 rpm 安装权限 exit 1 fi echo [2/6] 系统信息采集 if [ -f /etc/os-release ]; then . /etc/os-release echo 系统 ID: $ID echo 系统版本: $VERSION_ID else echo 未找到 /etc/os-release暂不支持该发行版 exit 1 fi echo 架构: $(uname -m) echo 升级前 ssh 版本: $(ssh -V 21) echo [3/6] 备份关键目录 mkdir -p $BACKUP_DIR cp -a /etc/ssh $BACKUP_DIR/ssh_conf_backup [ -d /etc/pam.d ] cp -a /etc/pam.d $BACKUP_DIR/pam_d_backup rpm -qa | grep -E openssh|openssl|zlib|pam $BACKUP_DIR/old_packages.txt echo 备份目录: $BACKUP_DIR echo [4/6] 检查 RPM 包目录 if ! ls $PKG_DIR/*.rpm /dev/null 21; then echo 目录中没有 RPM 文件请检查路径后重试 exit 1 fi echo [5/6] 按依赖顺序安装 RPM # 第一组动态库相关先于 openssh 本体 rpm -Uvh --replacefiles --replacepkgs \ $PKG_DIR/openssl-libs-*.rpm \ $PKG_DIR/openssl-*.rpm \ $PKG_DIR/zlib-*.rpm \ $PKG_DIR/pam-*.rpm if [ $? -ne 0 ]; then echo 动态库 RPM 安装失败停止升级开始恢复配置 cp -a $BACKUP_DIR/ssh_conf_backup/. /etc/ssh/ exit 1 fi # 第二组openssh 本体 rpm -Uvh --replacefiles --replacepkgs \ $PKG_DIR/openssh-*.rpm if [ $? -ne 0 ]; then echo OpenSSH RPM 安装失败停止升级 cp -a $BACKUP_DIR/ssh_conf_backup/. /etc/ssh/ exit 1 fi echo [6/6] 配置校验 if /usr/sbin/sshd -t; then echo sshd -t 校验通过 echo 升级后版本: $(ssh -V 21) echo 如需重启 sshd请手动执行: systemctl restart sshd echo 备份目录: $BACKUP_DIR else echo sshd -t 校验失败正在恢复原配置 cp -a $BACKUP_DIR/ssh_conf_backup/. /etc/ssh/ echo 原配置已恢复请检查日志 $LOG_FILE 并手工处理 exit 1 fi这段脚本最关键的参数是$PKG_DIR中的通配符。比如openssl-libs-*.rpm它要求目录里不能同时存在多个版本否则 rpm 会一次处理多个同类型包顺序就可能错乱。收集包的时候应该把目录里的旧版本清除只保留需要安装的那一套。脚本中exec (tee -a $LOG_FILE) 21是 bash 进程替换把标准输出和标准错误同时送去日志和终端。有的 shell 不支持进程替换如果环境默认 sh 是 dash要改成bash执行脚本第一行也写清楚了。日志文件放在/var/log下升级过程中如果 SSH 断了日志不受影响回头可以看全链路。参数说明set -euo pipefail让脚本在任何一条命令失败时立即退出这是为了防止 rpm 失败后脚本继续执行到校验环节造成配置和二进制不一致。但在rpm -Uvh后我没有直接依赖set -e因为 rpm 返回非零时后面还需要执行配置恢复所以使用了显式的if [ $? -ne 0 ]处理保证失败分支可控。4.2 DEB 系麒麟的变体写法并不是所有国产麒麟都是 RPM 体系部分桌面版或适配版本用的是 dpkg。如果你前期采集信息时看到的包管理器是 apt/dpkg那安装部分要换成# DEB 系下备份和安装命令的区别 dpkg -l | grep -E openssh|openssl|zlib $BACKUP_DIR/old_packages.txt dpkg -i \ $PKG_DIR/openssl-libs_*.deb \ $PKG_DIR/openssl_*.deb \ $PKG_DIR/zlib1g_*.deb \ $PKG_DIR/openssh-server_*.deb \ $PKG_DIR/openssh-client_*.deb \ $PKG_DIR/openssh-sftp-server_*.debdpkg -i一次传入多个.deb包也会尝试按顺序安装但它不像 rpm 那样强制检查依赖而是把所有包先解压再配置如果中间某个包依赖不满足后续包会进入半安装状态。所以 deb 系离线升级时收集依赖包要更仔细建议用apt-cache depends openssh-server在联网机上先递归看依赖树把涉及的.deb全部拉下来。另外 DEB 系的配置文件覆盖策略更依赖维护者的脚本/etc/ssh/sshd_config同样可能被改写备份动作不能省。4.3 执行规范和日志分析我一般会在正式执行前先找一台同等配置的测试机跑一遍同样的脚本确认没有包缺失后再动生产。执行时不要直接在终端前台跑那样一条命令失误就会占用整个会话正确做法是setsid bash /opt/scripts/upgrade_ssh_kylin.sh /data/rpm_packages \ /var/log/upgrade_ssh_kylin.out 21 setsid把脚本放到新的会话中与当前终端脱钩。这样即使 sshd 在升级过程中重启导致连接断开脚本进程也不会跟随 SIGHUP 退出。升级完成后回到机房或通过带外管理重新登录查看日志尾部tail -n 30 /var/log/upgrade_ssh_kylin.log日志里如果出现warning: /etc/ssh/sshd_config created as /etc/ssh/sshd_config.rpmnew说明新包确实认为你的配置被改动过并且保留了原文件在.rpmnew里。这时不要急着重启先对比.rpmnew和当前配置把需要的PermitRootLogin、PubkeyAuthentication改回原值再执行sshd -t。5. 避坑记录离线升级 OpenSSH 最常见的五个翻车场景下面这些坑不是理论推导都是实际运维中反复会撞见的。每一条我都从现象、原因、解决三方面来说明方便你直接对照自己遇到的报错。5.1 升级时 SSH 会话中断脚本跟着被杀现象远程执行脚本跑到 openssh-server 的 rpm 升级时终端窗口突然断开再登录上去发现脚本进程已经消失升级只进行到一半。原因旧版本的 openssh-server rpm 包在卸载旧包时会执行%postun脚本里面可能包含systemctl restart sshd或kill相关动作。这个操作会把你的当前 SSH 会话杀掉而前台运行的脚本随终端退出一起终止。解决升级动作放到后台且独立于终端会话关键命令是setsid加输出重定向具体写法参考 4.3 节。另外要约定好升级时不用 SSH 作为唯一通道至少保留带外管理口或本地串口。如果已经断了检查日志确认 rpm 是否装完再手动执行剩余的依赖和校验步骤。5.2 sshd 启动失败提示 libcrypto.so.10 版本不匹配现象升级完成后手工重启 sshd服务 failedjournalctl -u sshd报error while loading shared libraries: libcrypto.so.10: cannot open shared object file。原因新版本 OpenSSH 二进制链接到libcrypto.so.10但目标系统的/usr/lib64/下只有libcrypto.so.1.1说明收集安装包时漏掉了对应的openssl-libs版本。更坏的情况是有人用--nodeps --force强行装的 openssh绕过了依赖检查系统里根本没有任何一个 openssl-libs 满足要求。解决先执行ldd /usr/sbin/sshd | grep not found确认缺哪些库。然后到同一源下下载对应版本的openssl-libs用rpm -Uvh --oldpackage装回去。降级或补装时要注意--oldpackage只对 RPM 有效DEB 系要用dpkg -i --force-downgrade。如果你在升级前已经按第 3 章记录过old_packages.txt直接在里面查旧版本号拿旧包做降级是恢复最快的路径。5.3 PAM 认证失败升级后密码和密钥都登不上现象sshd 服务运行正常端口也通但登录时提示Permission denied系统日志出现pam_sss(sshd:auth): Operation failed或unix_chkpwd: password check failed。原因新版 openssh 默认启用UsePAM yes如果/etc/pam.d/sshd在升级过程中被覆盖或丢失PAM 判断流程直接断裂。另一个可能是旧包升级后留下了重复的 PAM 模块路径例如同时引用/lib/security/pam_unix.so和/lib64/security/pam_unix.so。解决把备份的 pam 配置恢复回去cp -a /root/backup_ssh_*/pam_d_backup/sshd /etc/pam.d/sshd restorecon -R /etc/pam.d 2/dev/null || true systemctl restart sshd同时检查/etc/ssh/sshd_config中是否有PasswordAuthentication no或者被.rpmnew覆盖成默认值。用sshd -T | grep -i passwordauthentication查看实际生效值如果显示 no把配置改回 yes 再重启。生产环境建议先用公钥登录测通一次再决定是否开密码认证。5.4 升级后ssh -V显示还是旧版本现象rpm 安装过程没有任何报错rpm -qa | grep openssh也显示新版本但执行ssh -V输出旧版本号。原因shell 的哈希表缓存了旧命令路径或者系统 PATH 里/usr/local/bin排在/usr/bin前面你实际执行的是源码安装的老 ssh。还有可能 rpm 只装了openssh-server没装openssh-clients而ssh命令还停留在旧的残留包上。解决按顺序排查hash -r which ssh type -a ssh rpm -qa | grep openssh如果which ssh指向/usr/local/bin/ssh说明历史上有过手工编译安装。此时要用对应版本 rpm 覆盖掉/usr/local/bin下的 ssh或者直接删除/usr/local/bin/ssh和/usr/local/bin/sshd再执行rpm -Uvh --replacefiles让 rpm 版本接管。记住升级后的ssh -V必须以rpm -ql openssh-clients列出的路径为准而不是which的结果。5.5 SELinux 上下文错乱导致密钥无法读取现象升级后 sshd 启动正常但所有公钥登录都超时或拒绝/var/log/audit/audit.log里有大量avc: denied { read }记录指向sshd_config或/root/.ssh/authorized_keys。原因从备份目录cp -a恢复配置文件时文件上的 SELinux 类型也被原样复制。如果备份时的类型是admin_home_t或etc_t还原后 sshd 进程没有权限读取。另外新版本的 openssh rpm 可能更新了/etc/ssh/ssh_config的安全上下文旧文件没跟着更新。解决恢复配置后立即重建上下文restorecon -Rv /etc/ssh /root/.ssh chmod 700 /root/.ssh chmod 600 /root/.ssh/authorized_keys systemctl restart sshdrestorecon会根据系统策略重置为ssh_etc_t、sshd_key_t等标准类型。如果 restorecon 之后还报 denied再用ausearch -m avc -ts recent看具体被拒绝的文件用chcon -t sshd_key_t单独修正。国产麒麟系统有些默认不开 SELinux但一旦开过这一坑基本必踩。6. 进阶做法把 RPM 包变成内网源升级后别忘了做三项验证单台机器跑脚本已经够用但如果你手上有几十台同样版本的麒麟服务器重复传 U 盘就不现实了。更稳妥的做法是把 RPM 包做成内网软件源让 yum 帮你自动解决依赖而“一键升级”就简化为一条命令。与此同时升级后的验证不能只看ssh -V真正的安全升级要验证配置、验证登录、验证算法协商缺一不可。6.1 用 createrepo 把 RPM 包目录变成本地软件源在一台能访问目标内网的跳板机上把之前收集到的 rpm 全部集中到一个目录执行yum install -y createrepo mkdir -p /var/repo/ssh-update cp /data/rpm_packages/*.rpm /var/repo/ssh-update/ createrepo /var/repo/ssh-update生成repodata/目录后这个文件夹就是一个标准 yum 源。在内网目标机器新建一个 repo 文件cat /etc/yum.repos.d/ssh-local.repo EOF [ssh-local] nameSSH Offline Upgrade Repo baseurlfile:///var/repo/ssh-update enabled1 gpgcheck0 EOF注意baseurl用的是本地文件路径也可以用nfs://或 HTTP 方式共享到内网其他机器。之后的升级命令变成yum --disablerepo* --enablerepossh-local --enablerepobase \ install openssh-server openssh-clients -y--disablerepo*是为了防止 yum 去访问那些本来就连不通的原始源导致超时--enablerepobase是允许系统自带的 base 源参与依赖解析因为 openssh 新版本依赖的audit-libs、pam升级包通常还在 base 里。如果你不想让 yum 自动装某些依赖可以在install后面加具体包名但那样又退化成手动管理了。6.2 本地源方式下的配置保留与回滚用 yum 安装包管理机制会自动处理依赖但配置文件覆盖的问题依然存在。yum 升级 openssh 后同样可能出现/etc/ssh/sshd_config被替换此时系统会留下.rpmnew文件。我的习惯是在执行 yum 之前先跑一次脚本里的备份段把/etc/ssh和/etc/pam.d打成 tar 包tar czf /root/ssh_backup_$(date %Y%m%d).tar.gz /etc/ssh /etc/pam.d这样即使.rpmnew机制失效也能全局恢复。而且 tar 包便于传输回滚时直接解压回去不需要逐台去翻备份目录。6.3 升级后必须验证的三项内容与收尾习惯第一项是版本。ssh -V输出的版本号要与安装包一致同时用rpm -q openssh-server确认 rpm 数据库里的版本两者对得上才算安装完整。第二项是配置。执行/usr/sbin/sshd -T重点看port、passwordauthentication、pubkeyauthentication、permitrootlogin这四个字段的实际生效值这些值才是真正控制服务行为的参数而不是配置文件里的注释或默认值。第三项是真实连接。在保留一个带外会话的前提下重启 sshd用新会话测试密码登录和公钥登录各一次。如果使用的是加密狗或跳板机还要确认算法协商正常常见问题表现为no matching cipher found这时要在sshd_config中追加兼容的Ciphers和KexAlgorithms列表。我的收尾习惯是在每台机器上升级成功后把该机的ssh -V、sshd -T、journalctl -u sshd -n 20三份输出存成一个以机器名命名的文件丢进整改记录目录。以后无论出问题还是被审计都不用重新回查。这个习惯救过我一次同样是离线升级半年后一台机器 sshd 突然拒绝旧版客户端连接翻出当时的sshd -T输出立刻定位到是我当时为兼容老跳板机加了一组弱 KeyExchanges而新扫描报告恰好要求移除这些算法。有记录可回查比什么都放心。希望这篇笔记能帮到你。升级 OpenSSH 不难难的是在断着网的机房、没有第二通道的情况下还能心平气和地重连上来。先把脚本和备份做好再把坑看一遍剩下的就是一台一台跑完回头补记录。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑