CentOS系统 OPENSSH一键升级脚本
CentOS系统 OPENSSH一键升级脚本引言为什么要升级OpenSSH作为系统管理员你一定遇到过这样的场景安全扫描报告显示OpenSSH存在高危漏洞而你的服务器上运行的还是几年前的旧版本。手动升级OpenSSH不仅步骤繁琐还容易因为配置错误导致SSH服务中断让你「锁在门外」。今天我将分享一个经过实战检验的一键升级脚本让你轻松完成OpenSSH的升级工作。OpenSSH是Linux系统远程管理的核心组件旧版本可能暴露于CVE-2023-28531等远程代码执行漏洞。升级不仅能修复安全漏洞还能获得新特性比如更高效的加密算法和更好的性能。但升级过程需要谨慎因为SSH服务一旦中断你就无法远程管理服务器了。## 升级前的准备工作在运行任何脚本之前我们需要确保系统环境满足要求。以下是一些关键准备步骤1.备份重要配置/etc/ssh/sshd_config和/etc/ssh/ssh_config文件要备份。2.检查当前版本通过ssh -V查看当前OpenSSH版本。3.确认网络连接脚本需要从官方源或镜像站下载源码包。4.准备备用连接如果有其他管理方式如IPMI、KVM确保可用如果没有至少保留一个SSH会话不要关闭。## 一键升级脚本详解下面是一个完整的自动化升级脚本。它使用Bash编写结合了错误处理和回滚机制。### 脚本1基础版本适合新手bash#!/bin/bash# OpenSSH一键升级脚本 - 基础版# 适用系统CentOS 7/8# 作者技术博主# 设置变量OPENSSH_VERSION9.6p1 # 目标版本BACKUP_DIR/root/ssh_backup_$(date %Y%m%d%H%M%S) # 备份目录# 函数错误退出error_exit() { echo [ERROR] $1 echo 正在回滚... # 恢复备份 if [ -d $BACKUP_DIR ]; then cp -r $BACKUP_DIR/sshd_config /etc/ssh/sshd_config cp -r $BACKUP_DIR/ssh_config /etc/ssh/ssh_config systemctl restart sshd echo 已恢复至旧版本配置 fi exit 1}echo OpenSSH升级脚本启动 echo 当前版本: $(ssh -V 21 | awk {print $1})# 步骤1安装依赖echo [1/5] 安装编译依赖...yum install -y gcc openssl-devel pam-devel zlib-devel || error_exit 依赖安装失败# 步骤2备份旧配置echo [2/5] 备份配置到 $BACKUP_DIR...mkdir -p $BACKUP_DIRcp /etc/ssh/sshd_config $BACKUP_DIR/cp /etc/ssh/ssh_config $BACKUP_DIR/cp /usr/sbin/sshd $BACKUP_DIR/ # 备份二进制文件# 步骤3下载并解压源码echo [3/5] 下载OpenSSH $OPENSSH_VERSION...cd /tmpwget -q https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-${OPENSSH_VERSION}.tar.gz || error_exit 下载失败tar xzf openssh-${OPENSSH_VERSION}.tar.gzcd openssh-${OPENSSH_VERSION}# 步骤4编译安装echo [4/5] 编译安装中..../configure --prefix/usr --sysconfdir/etc/ssh --with-pam --with-zlib --with-openssl || error_exit 配置失败make -j$(nproc) || error_exit 编译失败make install || error_exit 安装失败# 步骤5验证和重启echo [5/5] 验证安装...ssh -V 21 | grep -q $OPENSSH_VERSION || error_exit 版本验证失败systemctl restart sshdecho 升级完成新版本: $(ssh -V 21) 这个脚本的亮点在于- 自动备份原配置和二进制文件- 错误时自动回滚- 使用-j$(nproc)利用多核加速编译## 高级脚本带安全加固的版本基础版升级后你可能还想自动应用一些安全配置。下面的脚本在升级基础上增加了安全设置。### 脚本2带安全加固的升级版本python#!/usr/bin/env python3# OpenSSH一键升级脚本 - 安全加固版# 使用Python实现支持更复杂的逻辑import osimport subprocessimport sysimport shutilfrom datetime import datetime# 配置OPENSSH_VERSION 9.6p1BACKUP_DIR f/root/ssh_backup_{datetime.now().strftime(%Y%m%d%H%M%S)}def run_command(cmd, error_msg命令执行失败): 执行shell命令并检查结果 result subprocess.run(cmd, shellTrue, capture_outputTrue, textTrue) if result.returncode ! 0: print(f[ERROR] {error_msg}: {result.stderr}) rollback() sys.exit(1) return result.stdoutdef rollback(): 回滚到旧版本 print(正在执行回滚...) if os.path.exists(f{BACKUP_DIR}/sshd): shutil.copy(f{BACKUP_DIR}/sshd, /usr/sbin/sshd) shutil.copy(f{BACKUP_DIR}/sshd_config, /etc/ssh/sshd_config) subprocess.run(systemctl restart sshd, shellTrue) print(已恢复至旧版本)def secure_sshd(): 应用安全加固配置 print([安全加固] 正在应用安全配置...) with open(/etc/ssh/sshd_config, a) as f: f.write(\n# 安全加固配置\n) f.write(Protocol 2\n) # 仅允许SSHv2 f.write(PermitRootLogin prohibit-password\n) # 禁止root密码登录 f.write(PasswordAuthentication no\n) # 禁用密码认证 f.write(PubkeyAuthentication yes\n) # 启用公钥认证 f.write(MaxAuthTries 3\n) # 最大认证尝试次数 f.write(ClientAliveInterval 300\n) # 客户端活动间隔 f.write(ClientAliveCountMax 0\n) # 无活动断开def main(): print( OpenSSH安全升级脚本 ) print(f目标版本: OpenSSH_{OPENSSH_VERSION}) # 1. 检查当前版本 current run_command(ssh -V 21, 检查版本失败) print(f当前版本: {current.strip()}) # 2. 安装依赖 print([1/6] 安装依赖...) run_command(yum install -y gcc openssl-devel pam-devel zlib-devel wget) # 3. 备份 print(f[2/6] 备份到 {BACKUP_DIR}) os.makedirs(BACKUP_DIR, exist_okTrue) shutil.copy(/etc/ssh/sshd_config, BACKUP_DIR) shutil.copy(/etc/ssh/ssh_config, BACKUP_DIR) shutil.copy(/usr/sbin/sshd, BACKUP_DIR) # 4. 下载编译 print([3/6] 下载源码...) os.chdir(/tmp) run_command(fwget -q https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-{OPENSSH_VERSION}.tar.gz) run_command(ftar xzf openssh-{OPENSSH_VERSION}.tar.gz) os.chdir(fopenssh-{OPENSSH_VERSION}) print([4/6] 编译安装...) run_command(./configure --prefix/usr --sysconfdir/etc/ssh --with-pam --with-zlib --with-openssl) run_command(fmake -j{os.cpu_count()}) run_command(make install) # 5. 应用安全加固 print([5/6] 应用安全配置...) secure_sshd() # 6. 重启验证 print([6/6] 重启服务...) run_command(systemctl restart sshd) new_version run_command(ssh -V 21) print(f 升级成功新版本: {new_version.strip()} ) print(安全配置已生效) print( - 仅允许SSHv2协议) print( - 禁止root密码登录) print( - 禁用密码认证启用公钥认证) print( - 限制最大认证尝试次数为3次)if __name__ __main__: main()这个Python版本的优势- 使用subprocess模块精确控制命令执行- 安全配置自动追加到sshd_config- 回滚机制更完善保留旧版二进制## 常见问题与解决方案### 问题1编译时提示缺少开发包解决方案手动安装缺失包。bashyum install -y gcc-c make automake autoconfyum install -y pam-devel openssl-devel zlib-devel### 问题2升级后无法用密码登录如果你启用了密钥认证但尚未配置密钥可以临时修改配置bash# 编辑 /etc/ssh/sshd_configPasswordAuthentication yes # 改为yessystemctl restart sshd# 登录后立即配置密钥再改回no### 问题3远程连接中断怎么办这是最糟糕的情况。如果脚本运行中SSH连接断开1. 通过其他管理方式如控制台登录2. 检查/var/log/messages和/var/log/secure3. 手动运行回滚bashcp /root/ssh_backup_*/sshd_config /etc/ssh/cp /root/ssh_backup_*/sshd /usr/sbin/systemctl restart sshd## 总结通过本文介绍的一键升级脚本你可以大幅简化CentOS系统OpenSSH的升级工作。核心要点总结如下1.备份是生命线无论使用哪个脚本备份旧配置和二进制文件都是第一步这为回滚提供了保障。2.安全加固要谨慎禁用密码认证前请确保已配置好SSH密钥否则可能永远无法登录。3.测试环境先跑在生产环境运行前先在测试服务器上验证脚本的兼容性。4.监控日志升级后密切观察/var/log/secure中的登录日志确保服务正常运行。安全升级不是一次性任务而是持续的过程。建议每季度检查OpenSSH版本及时应用安全补丁。如果你在升级过程中遇到问题欢迎在评论区留言讨论。记住好的运维就是预防胜于治疗自动化脚本是预防的重要工具。

相关新闻

3分钟永久免费激活Microsoft 365:零风险Office许可证钩子终极指南

3分钟永久免费激活Microsoft 365:零风险Office许可证钩子终极指南

3分钟永久免费激活Microsoft 365:零风险Office许可证钩子终极指南 【免费下载链接】ohook An universal Office "activation" hook with main focus of enabling full functionality of subscription editions 项目地址: https://gitcode.com/gh_mirror…

2026/10/17 14:55:49 阅读更多 →
AM62L硬件防火墙实战:从寄存器配置到安全策略设计

AM62L硬件防火墙实战:从寄存器配置到安全策略设计

1. 从寄存器手册到实战:理解AM62L防火墙的底层逻辑如果你和我一样,长期在嵌入式系统,尤其是汽车电子或工业控制领域摸爬滚打,那你一定对“安全”这两个字有着近乎偏执的敏感。系统崩溃、数据被篡改、甚至被恶意代码劫持&#xff0…

2026/10/17 14:55:57 阅读更多 →
改进麻雀算法与深度学习融合的轴承故障诊断方法

改进麻雀算法与深度学习融合的轴承故障诊断方法

1. 项目概述 轴承作为旋转机械的核心部件,其健康状态直接影响设备运行安全。传统振动信号分析方法在复杂工况下存在特征提取不充分、诊断精度不足等问题。本项目提出了一种融合鱼鹰优化算法(Osprey Optimization Algorithm, OOA)和柯西变异的改进麻雀搜索算法(OCSSA…

2026/10/17 14:56:39 阅读更多 →

最新新闻

Java客户端连接HBase实战:从依赖配置到生产调优与排坑指南

Java客户端连接HBase实战:从依赖配置到生产调优与排坑指南

接手过数据平台项目的同行应该都有体会:业务方丢过来一个需求,说“把HBase里的用户行为数据实时同步到我们的Java服务里”,听起来挺简单,但真到自己动手用Java客户端去连HBase的时候,坑比想象中多得多。我早期做这块时…

2026/10/17 20:27:33 阅读更多 →
MATLAB教程PPT课件复现指南:从看懂到跑通再到复用

MATLAB教程PPT课件复现指南:从看懂到跑通再到复用

简介:这份MATLAB教程PPT课件面向高校学生、初学者及需要系统梳理MATLAB基础的工程技术人员,帮助其掌握矩阵运算、数据可视化、数值计算与程序编写等核心技能。压缩包内共1个PPT文件,整体约8.97MB,以幻灯片形式组织教学内容&#x…

2026/10/17 20:27:33 阅读更多 →
基于PLC的交通信号灯控制系统开题报告:四相位时序与I/O选型实战要点

基于PLC的交通信号灯控制系统开题报告:四相位时序与I/O选型实战要点

简介:一份基于PLC的交通信号灯控制系统的开题报告文档,面向计算机、自动化等专业学生,可作为撰写同类开题报告的结构参考。资源包仅含1个doc文件,大小约13KB,内容轻量;目前已有四十三人学习浏览。基于课题核…

2026/10/17 20:27:33 阅读更多 →
LeetCode刷题汇总方法论:从零构建解题思维框架与模板

LeetCode刷题汇总方法论:从零构建解题思维框架与模板

1. 刷题汇总这件事,到底该怎么理解LeetCode刷题汇总,说白了就是把一段时间内做过的题目,按照某种逻辑重新梳理一遍,把散落的知识点串成线、连成面。很多人刷题刷了几百道,遇到新题还是发懵,根本原因就是缺少…

2026/10/17 20:27:33 阅读更多 →
STM32 GPIO配置全攻略:引脚模式、寄存器、中断与避坑指南

STM32 GPIO配置全攻略:引脚模式、寄存器、中断与避坑指南

简介:这份STM32-GPIO篇专题笔记专为嵌入式初学者打造,围绕通用输入输出端口的核心概念展开,从什么是通用输入输出、八种可选工作模式,到各类控制寄存器的功能以及不同应用场景下的选择依据,均做了细致归纳,…

2026/10/17 20:27:33 阅读更多 →
OPC UA实践:超级个体的工业数据通路与生态协作

OPC UA实践:超级个体的工业数据通路与生态协作

前阵子在一个科创园区的小型聚会上,我见到了七八位以前只在群里打过照面的技术人。有搞PLC调试的,有写Web前端的,也有做数据库运维的,但那天晚上的话题出奇一致:OPC实践。这群人身上有个很明显的标签——超级个体&…

2026/10/17 20:26:32 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →