麒麟系统内网OpenSSH离线升级:依赖准备、一键脚本与避坑回滚

发布时间:2026/10/8 14:34:57
麒麟系统内网OpenSSH离线升级:依赖准备、一键脚本与避坑回滚 简介面向国产麒麟操作系统、同时兼容CentOS的离线一键升级方案聚焦无互联网或网络受限环境下OpenSSH与关联安全组件版本老旧、潜伏漏洞的运维痛点。资源共4个文件其中3个为tar.gz源码包、1个为update.sh升级脚本整体仅20.04MB轻量简洁适合内网或隔离网络批量分发部署。已有2090人学习下载适用人群覆盖数据中心运维、系统管理员及等保整改人员。包内核心组件包括OpenSSL 3.2.0、OpenSSH 9.7p1与zlib 1.3.1分别提供加密通信基础、SSH远程访问功能和压缩支持升级脚本封装依赖检查、编译安装、配置替换等环节可降低手工操作带来的出错风险即使非专业开发者也能按指引完成整套升级。通过一次运行即可将关键安全软件提升到新版本及时获得漏洞修复与性能改进对维持国产化环境的安全合规具有直接帮助。1. 麒麟系统 OpenSSH 离线升级内网服务器的安全刚需与高危操作内网服务器熬过第三年漏洞扫描报告把 OpenSSH 版本标红等保整改单上写着“升级 SSH 服务端”。你打开终端一试yum 连不上源apt 更不可能手里只有一台能上网的电脑和一个 U 盘。这就是国产麒麟操作系统离线一键升级 OpenSSH 的典型现场把新版本 OpenSSH 以及相关依赖文件打包进内网用一个脚本完成备份、安装、配置恢复、重启和验证。这个标题解决的不只是“把版本号升上去”而是让离线环境里最容易被搞砸的 SSH 升级变得可回滚、可复现。适合被等保和漏扫逼着升级的内网运维也适合那些想升级又怕远程断连的人。下面按依赖准备、脚本实现、验证避坑的顺序讲。2. 升级前检查确认系统版本、当前 OpenSSH 基线与离线升级可行性2.1 先摸清系统底细麒麟发行版、内核与包管理器的判断麒麟操作系统在服务器领域常见的是银河麒麟 V10分为 SP1、SP2、SP3 等小版本还有 x86_64 和 aarch64 两种主流架构。不同小版本对应的软件源和依赖库集合有差异所以升级前第一件事不是找包而是把系统身份确认清楚。我一般会在目标机上先跑这一串命令# 查看系统名称与版本 cat /etc/os-release # 麒麟特有的版本文件可能存在也可能不存在 cat /etc/kylin-release 2/dev/null # 查看内核版本用于判断小版本跨度 uname -r # 确认包管理器类型 which yum dnf rpm 2/dev/null # 确认架构x86_64 和 aarch64 的 rpm 包不通用 uname -m逻辑说明/etc/os-release是 Linux 发行版的标准身份文件能看出系统名称、版本 ID/etc/kylin-release是麒麟发行版追加的标识文件有的系统里有有的没有所以加了2/dev/null避免报错。uname -m决定你去下载 x86_64 还是 aarch64 的 rpm 包这一步错了后面全部白做。参数说明麒麟 V10 的软件包兼容性对标 CentOS 8绝大多数情况下yum和rpm命令都可用如果系统里只有dnf下文所有yum命令换成dnf即可。内核版本主要用于判断系统小版本例如4.19.90-23这类版本号是麒麟基于 CentOS 8 内核定制的看到4.19开头基本可以走 CentOS 8 的依赖路线。2.2 确认当前 OpenSSH 与 OpenSSL 版本判断能不能直接升OpenSSH 升级最大的变量不是自己而是 OpenSSL。新版 OpenSSH 编译时依赖 OpenSSL 1.1.1 以上的库如果目标机的 OpenSSL 版本过低升级 OpenSSH 就得连带升级 OpenSSL风险面立刻扩大好几倍。所以在准备离线包之前先在目标机上确认这两个组件的当前版本# 查 OpenSSH 版本注意 ssh -V 输出到 stderr需要重定向 ssh -V 21 # 查 OpenSSL 版本 openssl version # 列出所有已安装的 openssh / openssl 相关包 rpm -qa | grep -E ^(openssh|openssl)逻辑说明ssh -V 21是因为 OpenSSH 把版本信息打印在标准错误输出上不重定向的话在某些终端里看不到rpm -qa | grep -E把主包、客户端、服务端、依赖库全部列出来方便后面写备份清单。判断可行性时我按三条规则走当前 OpenSSL 版本大于等于 1.1.1则只升级 OpenSSH 相关包OpenSSL 版本过低但系统是麒麟 V10 SP1 以上通常自带 OpenSSL 1.1.1问题不大如果 OpenSSL 版本低于 1.1.1需要连同 openssl-libs 一起升级这时候要格外谨慎。OpenSSL 是整个系统的加密底座升级后 ssh、nginx、数据库客户端都可能受影响不到万不得已我不建议在离线环境里动它。能只升 OpenSSH 就只升 OpenSSH这是这条路线最省心的边界。2.3 依赖关系分析升级 OpenSSH 到底要带哪些“相关文件”标题里的“相关文件”其实是一串依赖包逐个去网上下载很容易漏。OpenSSH 服务端的依赖链通常包含openssh-server、openssh-clients、openssh主包以及运行库openssl-libs、pam、libedit、fipscheck-lib、pcre2等。不同版本依赖树不同最可靠的做法是让 yum 自己算依赖而不是手动猜。# 在联网机器上执行按依赖树分析 openssh-server 需要哪些包 yum deplist openssh-server # 更直接的方式下载时让 yumdownloader 自动解析依赖 yumdownloader --resolve --destdir./rpms openssh-server openssh-clients逻辑说明yum deplist是分析阶段的工具列出每个依赖项的来源包名yumdownloader --resolve是实际拉包阶段的工具--resolve表示把依赖包一并下载到--destdir指定的目录。两个命令可以配合使用先deplist看清依赖结构再downloader直接拉全。这里要提醒一个常见误用有人图省事直接yum install --downloadonly但--downloadonly在某些旧版本 yum 里不会把依赖保存到指定目录而是散落在缓存中离线传输时容易漏。yumdownloader --resolve的输出目录更可控打包时一个目录走人。依赖分析的结果不要凭记忆把deplist输出保存在文本里和 rpm 包一起带进内网安装时报缺包时对照排查。3. 离线依赖包准备yumdownloader 拉包、打包传输与本地源构建3.1 在联网机器上按依赖树拉全 RPM 包离线升级的第一步是在内网之外找一台“原样机”系统版本尽量与目标机一致比如都是麒麟 V10 SP2、都是 x86_64至少也要同为 CentOS 8 系。在这台机器上拉包才能保证依赖版本和目标环境兼容。# 安装 yum-utils提供 yumdownloader 命令 yum install -y yum-utils # 创建存放 rpm 的目录 mkdir -p ~/openssh-upgrade/rpms cd ~/openssh-upgrade # 按依赖树下载 openssh 服务端和客户端 yumdownloader --resolve --destdir./rpms \ openssh-server openssh-clients # 检查下载结果 ls -lh ./rpms逻辑说明yumdownloader --resolve是这条命令的核心它会把openssh-server和openssh-clients的依赖全部下载到./rpms目录没有--resolve的话只下载主包进了内网安装时必然报缺依赖。下载完成后检查目录里有没有openssh-server、openssh-clients、openssh、openssl-libs、pam这几个关键文件缺了说明在线源本身有问题。参数说明如果在线源里的 OpenSSH 版本还是旧版可以给yumdownloader显式指定版本号例如openssh-server-9.8p1-1.x86_64也可以配置 CentOS Vault 源指向历史版本。在线下载时注意架构uname -m是aarch64就要加--archaarch64否则默认拉当前机器的架构拷到鲲鹏或飞腾机器上会安装失败。打包传输内网时常见做法是tar czf openssh-rpms.tar.gz rpms通过堡垒机或 U 盘拷入内网后解压到固定目录比如/data/openssh-repo/rpms。这个目录后面既当本地源也作为一键升级脚本的输入目录。3.2 构建本地 yum 源createrepo 与本地 repo 配置把 rpm 包直接拷进内网后可以用rpm -Uvh一个个装但依赖顺序一旦出错就会卡壳。更可靠的做法是构建一个本地 yum 源让 yum 自己解析依赖顺序。构建本地源需要createrepo工具麒麟 V10 上一般用createrepo_c这个 C 实现版本。# 安装 createrepo_c yum install -y createrepo_c # 进入 rpm 包目录生成 repodata 元数据 cd /data/openssh-repo/rpms createrepo . # 编写本地源 repo 文件 cat /etc/yum.repos.d/openssh-local.repo EOF [openssh-local] nameopenssh-local baseurlfile:///data/openssh-repo/rpms enabled1 gpgcheck0 EOF # 刷新缓存让 yum 识别新源 yum clean all yum makecache逻辑说明createrepo .会在当前目录生成repodata文件夹里面是包的元数据和依赖关系索引yum 读到它才知道这个目录里有什么包、谁依赖谁。repo 文件的baseurl指向本地路径file://协议是本地源的写法gpgcheck0是因为离线环境里通常没有对应的 GPG 公钥跳过签名校验。参数说明enabled1表示这个源默认开启但要注意这个 repo 里只有 OpenSSH 相关包没有系统其他软件不会干扰内网原有环境。如果内网本身有其他源建议在这个 repo 文件里不写priority配置保持默认优先级即可。createrepo命令在部分系统上是createrepo_c的软链两个命令都可以执行如果提示找不到命令先yum install -y createrepo_c再试一次。3.3 内网安装验证先 localinstall 试装再决定是否走脚本本地源构建完成后我建议先手工试装一次而不是直接上一键脚本。这一步的目的是暴露依赖缺口和潜在冲突试装时发现的错误都好解决等脚本跑到一半再发现问题就麻烦了。# 从本地源安装强制只使用本地 repo yum --disablerepo* --enablerepoopenssh-local -y install \ openssh-server openssh-clients # 验证安装后的版本 ssh -V 21逻辑说明--disablerepo* --enablerepoopenssh-local是双保险先把所有其他源禁用再单独启用本地源确保安装过程完全离线、完全可控。这一步如果报缺依赖错误信息里会明确写“需要 xxx”回到联网机器上用yumdownloader --resolve xxx补齐对应包再传进来。试装时如果提示package openssh-server is already installed说明目标机上已经装过同版本或更高版本需要先检查当前版本如果提示冲突多半是旧版本残留的配置文件与新版本不兼容可以先备份后强制覆盖。试装成功后不要急着采用这个环境我一般会把系统恢复到升级前状态再走正式的一键脚本这样才能验证脚本本身的可靠性。这个习惯帮我挡掉过不少“手工能行、脚本翻车”的问题。4. 一键升级脚本备份、安装、配置恢复、重启与校验的完整实现4.1 脚本骨架变量定义与运行前置检查一键升级脚本的价值不在于“执行安装”而在于把备份、安装、校验、回滚串成一条可靠流水线。脚本写不好的话升级到一半断了当前 sshd 起不来远程连接全断那才是真正的灾难。下面这个脚本是我常用的结构你复制后需要按实际版本号调整变量。#!/bin/bash # upgrade_openssh.sh —— 麒麟OS离线一键升级OpenSSH # 用法: bash upgrade_openssh.sh set -euo pipefail SSH_VER9.8p1 # 目标版本标识仅用于日志 PKG_DIR/data/openssh-repo/rpms # 存放rpm包的目录 BACKUP_DIR/backup/openssh-$(date %Y%m%d_%H%M%S) echo [1/5] 前置检查 if [ ! -d $PKG_DIR ]; then echo 错误: rpm包目录不存在: $PKG_DIR exit 1 fi if ! command -v yum /dev/null 21; then echo 错误: 未找到yum命令请确认系统为麒麟V10/CentOS系 exit 1 fi echo [2/5] 备份当前状态 mkdir -p $BACKUP_DIR rpm -qa | grep -E ^(openssh|openssl) $BACKUP_DIR/rpm-list.txt # sshd_config 可能在 /etc/ssh 或 /usr/local/etc/ssh for cfg in /etc/ssh/sshd_config /etc/ssh/ssh_config /usr/local/etc/ssh/sshd_config; do if [ -f $cfg ]; then cp $cfg $BACKUP_DIR/ fi done # host key 必须备份防客户端报 host key 变化 if ls /etc/ssh/ssh_host_* /dev/null 21; then cp -r /etc/ssh/ssh_host_* $BACKUP_DIR/ fi cp -r /etc/pam.d/sshd $BACKUP_DIR/ 2/dev/null || true echo [3/5] 从本地源安装新版本 yum --disablerepo* --enablerepoopenssh-local -y install \ openssh-server openssh-clients echo [4/5] 校验并重启sshd if ! sshd -t 2$BACKUP_DIR/sshd-t.log; then echo sshd配置校验失败回滚配置文件并重启 [ -f $BACKUP_DIR/sshd_config ] cp $BACKUP_DIR/sshd_config /etc/ssh/sshd_config systemctl restart sshd exit 2 fi systemctl enable --now sshd systemctl restart sshd sleep 2 if ! ss -lntp | grep :22 /dev/null; then echo 错误: sshd未监听22端口执行回滚 systemctl restart sshd || true exit 3 fi echo [5/5] 完成 ssh -V 21 echo 备份目录: $BACKUP_DIR逻辑说明脚本按五个阶段推进前置检查先确认 rpm 包目录和 yum 命令存在避免装到一半发现路径不对备份阶段把配置文件、host key、pam 配置、包版本清单全部落盘安装阶段强制使用本地 repo校验阶段先跑sshd -t验证语法再检查端口监听两步都过才算成功。参数说明set -euo pipefail是三连保险-e让脚本在遇到错误时立即退出、-u防止未定义变量导致路径错误、-o pipefail让管道中任何一步失败都算失败。BACKUP_DIR带时间戳同一个脚本跑多次不会覆盖旧备份。备份配置文件的for循环覆盖了麒麟 V10 上两个可能的配置路径因为部分发行版把 sshd_config 放在/usr/local/etc/ssh下不探测两条路径的话备份会落空。4.2 备份与安装给 sshd_config、host key 和 PAM 配置留好后路脚本第 2 步的备份是整个流程的“后悔药”。我在线上吃过亏只备份了 sshd_config没备份 host key升级后所有客户端的 known_hosts 全报警几十台机器一起连不上。所以现在备份清单永远是四个一配置文件、host key、PAM 配置、rpm 版本清单。host key 备份要注意ssh_host_*这个通配符匹配的是/etc/ssh下所有主机密钥文件包括ssh_host_rsa_key、ssh_host_ecdsa_key、ssh_host_ed25519_key不仅要拷文件还要保持权限位不变。恢复时install -m 600重新设置权限因为部分 rpm 安装后如果检测到 key 已存在会用新的权限重新生成导致原 key 虽然有备份但权限不对。PAM 配置备份是很多人忽略的一环。新版 openssh-server 安装时不会主动改/etc/pam.d/sshd但如果新旧版本对 PAM 模块的依赖不同比如新版要调用pam_keyinit而旧版没有登录时就会莫名其妙失败。把/etc/pam.d/sshd备份下来出问题时可以直接比对差异。安装阶段的--disablerepo* --enablerepoopenssh-local双开关看似啰嗦但非常重要。内网环境有时会残留半配置的其他 repo 文件yum 自动匹配到这些源后可能拉取到错误版本的依赖双开关直接堵死这条路。4.3 升级后强制校验sshd -t、端口监听、新连接测试脚本第 4 步的校验逻辑是“先本地验证再重启服务”。sshd -t是 OpenSSH 自带的配置语法检查它对当前配置文件做解析语法错误会直接输出到 stderr 并返回非零退出码。这一步能拦住绝大多数配置不兼容问题。校验失败时脚本自动恢复备份的 sshd_config 并重启服务然后退出保证至少旧配置还能用。# 验证配置语法 sshd -t # 查看端口监听状态 ss -lntp | grep :22 # 查看服务运行状态 systemctl status sshd --no-pager逻辑说明sshd -t验证的是语法层不是运行时层语法通过了不代表能完成密码认证或 PAM 认证。所以脚本重启后还要检查端口监听。systemctl restart sshd后立刻查端口可能查不到因为服务还在启动中脚本里的sleep 2就是给启动留出余量。校验的真正盲区是“新连接能不能建立”。服务监听 22 端口不代表新会话能完成认证。这个测试没法在脚本里自动完成因为涉及密码输入我一般会留一个手工验证步骤脚本跑完后不要关闭当前会话新开一个终端登录测试确认成功再关旧会话。这个动作要写进升级流程里不能省。4.4 配置恢复与最小改动原则不要整包覆盖新版配置模板升级后最大的坑不是 rpm 安装失败而是配置文件被新版本模板覆盖。新版 OpenSSH 的 sshd_config 模板里默认值、注释格式和旧版差异很大直接覆盖会把你在旧版上做的端口、AllowUsers、认证方式等定制全冲掉。正确做法是“保留新模板迁移旧配置”。# 对比备份的旧配置和当前新配置 diff $BACKUP_DIR/sshd_config /etc/ssh/sshd_config | head -80逻辑说明diff把差异打出来重点关注几类被注释掉的默认项改为非注释项、参数默认值变化、新增的算法配置段。迁移时不要整个拷贝旧文件只把旧配置里明确写出的参数项搬到新文件对应位置。新版模板里的注释本身是良好的参考文档保留它能帮你理解默认行为。常见迁移项包括Port、PermitRootLogin、PasswordAuthentication、PubkeyAuthentication、UsePAM、AllowUsers、ClientAliveInterval。迁移完成后跑一次sshd -t确认没有语法错误。这里有一个玄学点新版 OpenSSH 对某些旧参数做了更严格的检查比如旧的Ciphers值列表里包含不安全的算法新版直接拒绝启动。遇到这种情况按新版的报错提示删掉对应行即可不要试图绕过校验。5. 升级后的验证与避坑连接测试、回滚方案与三个高频翻车点5.1 验证清单从 ssh -V 到远程重连的完整检查升级完成不等于升级成功。我给自己定的标准流程是五步验证每步对应一个真实的失败场景。# 1. 版本确认 ssh -V 21 # 2. 服务状态确认 systemctl status sshd --no-pager # 3. 端口监听确认 ss -lntp | grep :22 # 4. 服务日志排查 journalctl -u sshd --since today | tail -30 # 5. 本地回环认证测试会提示输入密码 ssh -o StrictHostKeyCheckingno \ -o PreferredAuthenticationspassword \ -o PubkeyAuthenticationno \ $(whoami)127.0.0.1 echo login ok逻辑说明前四步检查的是服务层面第五步是认证层面。ssh -V确认版本号已经变化systemctl status看服务是否处于 runningss -lntp看 22 端口是否由 sshd 监听journalctl看启动日志里有没有报错最后一步在本地回环地址上做一次真实的密码认证能通说明 PAM 和认证模块没被升级打坏。参数说明第五步里-o PreferredAuthenticationspassword -o PubkeyAuthenticationno强制走密码认证因为很多机器配置了免密登录不加这两个参数可能走的都是公钥认证密码模块是否正常反而测不出来。StrictHostKeyCheckingno是为了跳过 known_hosts 校验因为回环地址可能没在 known_hosts 里。手工补一个“新会话测试”远程升级时保持当前连接不断另开一个终端用 SSH 客户端连一次成功后再关旧终端。这条准则能挡住最尴尬的事故——升级成功了但你把自己关在门外。5.2 断连与依赖缺失离线升级最常见的两个坑踩坑记录一现象远程执行升级脚本后 SSH 瞬间断开再连提示拒绝连接或超时。原因rpm 安装后自动触发了 sshd 重启而新版 sshd 由于配置不兼容或依赖库缺失没有正常启动。解决先用带外管理口登录服务器检查systemctl status sshd和journalctl -u sshd如果 sshd 没起来执行脚本里的回滚逻辑或者手工恢复备份配置并重启。这个坑的根源在于“远程升级 SSH”本身就是高风险动作我能给的最实在建议是升级前确认带外管理可用或者使用at延迟重启给脚本退出留出余量。# 让 sshd 在 2 分钟后自动重启而不是立即重启 echo systemctl restart sshd | at now 2 minutes逻辑说明at命令把重启动作延迟两分钟脚本在这两分钟内正常退出当前 SSH 连接保持到重启前最后一刻。前提是系统里安装了 atd 服务并且处于运行状态如果没有也可以用nohup bash -c sleep 120; systemctl restart sshd 替代。踩坑记录二现象升级后 sshd 启动失败日志里报error while loading shared libraries: libcrypto.so.1.1。原因新版本 OpenSSH 依赖的libcrypto.so.1.1在系统里不存在或者版本偏旧下载依赖包时漏掉了openssl-libs。解决用ldd /usr/sbin/sshd找出所有缺失的共享库回到联网机器上用yumdownloader --resolve openssl-libs补齐重新拷入内网安装。这条翻车记录告诉我们--resolve拉包后一定要比对依赖清单缺库是离线升级里最常见的失败原因。5.3 证书与 PAM 玄学host key 重新生成、UsePAM 导致的登录失败踩坑记录三现象升级后客户端连接报 “REMOTE HOST IDENTIFICATION HAS CHANGED”指纹对不上。原因rpm 安装过程检测到 host key 文件缺失或权限不对自动生成了一组新的主机密钥客户端 known_hosts 里记录的旧指纹自然失效。解决在备份目录里找回原 host key恢复到/etc/ssh/下并修正权限。# 恢复原 host key 并修正权限 install -m 600 $BACKUP_DIR/ssh_host_ed25519_key /etc/ssh/ install -m 644 $BACKUP_DIR/ssh_host_ed25519_key.pub /etc/ssh/ # 重启 sshd 使新 key 生效 systemctl restart sshd逻辑说明install命令比cp适合这个场景因为它可以同时设置权限。注意 ed25519、rsa、ecdsa 三套 key 都要恢复只恢复一个会在客户端优先使用其他算法时仍然报警。如果备份目录里没有 host key只能逐个客户端删除 known_hosts 里对应条目重新连接纯手工操作非常难受。这就是为什么 4.2 里我说 host key 备份比配置文件备份更重要。踩坑记录四现象sshd 正常运行端口正常监听但密码登录总是失败journalctl 里能看到Failed password记录。原因UsePAM yes状态下新的 sshd 二进制调用的 PAM 模块与当前系统 PAM 配置不匹配比如新版要调pam_keyinit.so但/etc/pam.d/sshd里没写或者引用的模块路径无效。解决先恢复备份的/etc/pam.d/sshd再用下面这条命令检查模块是否存在。# 提取 sshd 的 PAM 配置里所有模块名 grep -v ^# /etc/pam.d/sshd | \ grep -oE pam_[a-z_]\.so | sort -u # 逐个核对模块文件是否真实存在 ls /lib64/security/ | grep ^pam_keyinit逻辑说明grep -oE pam_[a-z_]\.so把配置里的模块名全部抽出来ls /lib64/security/是 PAM 模块的默认存放目录两边一对照就能看出谁缺失。如果缺失的模块不是关键的可以在配置里注释掉对应行如果缺失的是核心认证模块必须从联网机器上把对应 pam 包拉进来。应急时可以把UsePAM临时改为no恢复登录但这会影响密码策略、登录限制等 PAM 能力只能作为救急手段不能长期使用。5.4 回滚方案用 --oldpackage 降级别在慌乱中删包回滚是升级方案的最后一道防线。如果新版 sshd 反复出问题最好的选择是降级回旧包。这里要强调一个操作准则不要用rpm -e卸载新版再安装旧版卸载动作会把配置文件和依赖关系一起删掉容易把系统搞坏。正确做法是rpm -Uvh --oldpackage直接降级。# 进入备份目录里面应有 rpm-list.txt 和旧版本 rpm 包 cd $BACKUP_DIR # 用 --oldpackage 覆盖降级到旧版本 rpm -Uvh --oldpackage \ ./openssh-server-8.0p1-*.rpm \ ./openssh-clients-8.0p1-*.rpm # 恢复旧配置和 host key cp $BACKUP_DIR/sshd_config /etc/ssh/sshd_config cp $BACKUP_DIR/ssh_host_* /etc/ssh/ # 重启服务 systemctl restart sshd逻辑说明--oldpackage参数允许 rpm 用旧版本包覆盖当前安装的新版本相当于一次“向下升级”。比rpm -e安全得多因为包内的脚本会按正常事务处理配置迁移。注意回滚顺序先降级 rpm 包再恢复配置最后重启服务。参数说明这里的版本号8.0p1要替换成你备份时实际查到的旧版本具体版本以rpm-list.txt里的记录为准不要凭记忆写。恢复 host key 后同样要确认权限位是 600。这个降级命令能救命的场景是新版本与系统里某个安全模块不兼容或者厂商后续没有适配补丁。降级不是开倒车是给自己留一条体面的退路。6. 进阶升级后顺手做 sshd_config 加固与下一次升级的省心习惯升级到新版本后配置文件的默认值通常比老版本保守但还不代表达到安全基线。等保整改一般会要求关闭 root 密码登录、降低暴力破解风险这些可以借升级窗口顺手做完避免以后为改一行配置再申请一次变更窗口。# 在 sshd_config 中追加以下加固项然后 sshd -t 验证 cat /etc/ssh/sshd_config EOF PermitRootLogin prohibit-password MaxAuthTries 3 ClientAliveInterval 300 ClientAliveCountMax 2 EOF systemctl restart sshd参数说明PermitRootLogin prohibit-password允许 root 用密钥登录、禁止密码登录适合保留 root 管理入口又不想暴露密码的场景MaxAuthTries 3限制单次连接认证尝试次数ClientAliveInterval 300每 300 秒探测一次客户端存活状态配合ClientAliveCountMax 2可在客户端异常掉线后回收连接。这些参数改完后一定要跑sshd -t再重启语法错误会直接导致服务起不来。做完加固后还有几件顺手的事。升级用的 rpm 包目录不要删下次再升级时作为基础源直接复用备份目录保留最近三次即可太老的历史版本占用空间但意义不大把本次升级的版本号、依赖包清单、遇到的问题记录成一个简短变更日志放在备份目录里。这个习惯尤其适合内网机器多的环境下次其他机器升级时直接对照日志走流程不用再踩一遍同样的坑。我在线上确实干过一回把 host key 搞丢的事那之后每次升级前第一件事就是先tar一份/etc/ssh整个目录这个习惯一直留到现在。离线升级 OpenSSH 本身不复杂复杂的从来都是“没留后路”之后的补救。希望这篇内容能帮你在下一次等保整改里少踩几个坑顺利把内网 OpenSSH 一次升到位。本文还有配套的精品资源点击获取

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询