当前位置: 首页 > news >正文

Centos7环境升级openssh7.4p1至openssh9.8p1版本

Centos7环境升级openssh7.4p1至openssh9.8p1版本

  • 测试步骤
    • centos7容器
    • 安装yum-utils
    • 安装openssh
    • openssh配置和启动
      • 生成 SSH 主机密钥
      • 修改 SSH 配置文件
      • 设置 Root 密码
      • 启动 SSH 服务
    • 远程连接容器内centos
    • 安装打包依赖
    • 下载打包脚本、指定 openssh 版本
    • 一键下载源码 + 编译打包
      • 编译
      • 升级
      • 配置更新并重载

生产环境系统使用的是Centos7版本,默认安装的是openssh7.4p1,最近扫描出来这个组件存在很多中高风险的安全漏洞,打补丁的方式感觉很繁琐,工作量比较大,选择尝试直接升级openssh版本,最终比对了一下,选择了9.8p1版本。

由于是生产环境,之前的安装部署工作都没有参与,个人还是比较谨慎。
想到的办法是在本地docker环境模拟一下7.4升级9.8的操作,看是否会出现ssh会话断连以及升级后无法连接等问题。

测试步骤

centos7容器

配置好镜像源后,直接拉取centos:7镜像

dockerpull centos:7

启动容器

# 注意将容器内部的22端口映射出来dockerrun-d--namecentos7-p2222:22 centos:7sleepinfinity

启动没问题后,可以使用docker exec命令进入容器内部,使用ssh -V命令查看,应该是没有预装的,镜像版本的centos比较纯净,很多工具都没有安装的。

# 进入容器内部,注意替换为自己的container iddockerexec-it容器Id /bin/bash# 查看ssh和ssl版本ssh-Vopenssl version

安装yum-utils

我这里的容器内部可以访问外网,并且我的宿主机是arm架构的,对应的,容器也是arm的,可能和主流的x86 amd架构有区别,大体思路我认为是一致的。

修改ARM64 专用阿里云 centos7 vault 源

cat>/etc/yum.repos.d/CentOS-Base.repo<<'EOF' [base] name=CentOS-7.9 Base-Aliyun-aarch64 baseurl=https://mirrors.aliyun.com/centos-vault/altarch/7.9.2009/os/aarch64/ enabled=1 gpgcheck=0 [updates] name=CentOS-7.9 Updates-Aliyun-aarch64 baseurl=https://mirrors.aliyun.com/centos-vault/altarch/7.9.2009/updates/aarch64/ enabled=1 gpgcheck=0 [extras] name=CentOS-7.9 Extras-Aliyun-aarch64 baseurl=https://mirrors.aliyun.com/centos-vault/altarch/7.9.2009/extras/aarch64/ enabled=1 gpgcheck=0 EOF

刷新 yum 缓存

yum clean all&&yum makecache

安装yum-utils

yuminstall-yyum-utils

安装openssh

在/opt/ssh目录下,下载openssh-server及其依赖包,并升级安装安装

mkdir-p/opt/ssh# 进入目录cd/opt/ssh# 下载rpm包yumdownloader--resolveopenssl openssh openssh-server openssh-clients# 升级覆盖安装rpm-Uvh--replacepkgs*.rpm

查看ssh和ssl版本

ssh-Vopenssl version

openssh配置和启动

生成 SSH 主机密钥

由于容器是纯净环境,通常缺少主机密钥,直接启动 sshd 会报错(提示无法加载 host key)。
bash

ssh-keygen-A

(注:该命令会自动在 /etc/ssh/ 目录下生成 RSA、ECDSA 和 ED25519 等类型的密钥)

修改 SSH 配置文件

编辑 /etc/ssh/sshd_config 文件,确保允许 root 用户通过密码登录:

vi/etc/ssh/sshd_config

找到并修改或取消以下两行的注释:

PermitRootLoginyesPasswordAuthenticationyes

设置 Root 密码

Docker 默认拉取的 CentOS 镜像中,root 账户是没有密码的,必须手动设置一个密码才能进行 SSH 认证:

passwdroot

按提示输入两次新密码

启动 SSH 服务

# 后台运行/usr/sbin/sshd-D&

远程连接容器内centos

使用ssh工具连接,localhost的2222端口,输入用户名root和秘钥,测试连接,正常情况到这里就可以登录了。如果使用localhost不行,换成127.0.0.1试试。

到此,准备工作就算完成了。

其实,如果我的环境是x86 amd的,应该更好办,网上9.8的资源支持amd架构的比较多,但是arm的不好找。能找到完整有效rpm包的话,直接下载下来升级覆盖就行了。

安装打包依赖

# 安装开发套件+rpmbuild打包工具yum groupinstall-y"Development Tools"yuminstall-yrpm-build pam-devel krb5-devel zlib-devel libXt-devel libX11-devel gtk2-devel perl-IPC-Cmd perl-Time-Piece systemd-devel imakewgetunzip

下载打包脚本、指定 openssh 版本

cd/optwgethttps://github.com/boypt/openssh-rpms/archive/refs/heads/main.zipunzipmain.zip&&cdopenssh-rpms-main

这里如果容器里面下载不下来,可以在宿主机直接通过地址下载后,复制到容器内部的/opt目录下

编辑ssl和ssh的版本信息

# 修改版本配置version.envvimversion.env# 修改:OPENSSHSRC=openssh-9.8p1.tar.gz# 要9.9就改成openssh-9.9p1.tar.gz# OpenSSL选型:9.x openssh最低需要openssl1.1.1,脚本自动下载内置openssl源码编译进rpm,不改动系统原生openssl1.0.2k,完美兼容centos7自带opensslOPENSSLSRC=openssl-1.1.1w.tar.gz

一键下载源码 + 编译打包

这里会根据version.env配置的版本去拉取对应的源码,再编译

# 下载openssh、openssl、askpass源码bashpullsrc.sh

这里如果拉取有问题,可以直接替换镜像源,或者切换到downloads目录下,直接wget下载,目的其实你就是根据version信息去下载对应版本的源码包。

编译

# 编译生成rpm,输出目录:./RPMS/aarch64/bashcompile.sh el7

我这里编译时遇到了以下报错

error: File not found: /opt/openssh-rpms-main/el7/BUILDROOT/openssh-9.8p1-1.el7.aarch64/usr/libexec/openssh/sshd-auth RPM build errors: File not found: /opt/openssh-rpms-main/el7/BUILDROOT/openssh-9.8p1-1.el7.aarch64/usr/libexec/openssh/sshd-auth /opt/openssh-rpms-main

删除 spec 里的 sshd-auth 行,再重新编译

sed-i'/sshd-auth/d'el7/SPECS/openssh.specbashcompile.sh el7

升级

编译完成后,在目录/opt/openssh-rpms-main/el7/RPMS/aarch64下生成了以下三个rpm包


进入该目录,直接安装rpm包

# 进入目录cd/opt/openssh-rpms-main/el7/RPMS/aarch64# 检查以下依赖项yumdownloader--resolveopenssh-9.8p1-1.el7.aarch64.rpm openssh-clients-9.8p1-1.el7.aarch64.rpm openssh-server-9.8p1-1.el7.aarch64.rpm# 安装rpm-Uvh--force--nodepsopenssh-*.rpm

到了这里,升级安装就完成了,但新的会话可能还是连接不进来,需要做一些配置
特别注意,不要关闭当前窗口

配置更新并重载

# 检查配置,如果有报错的话就用ai查一下缺啥sshd-t
# 新的 sshd 配置里带了容器不支持的 GSSAPI 认证参数sed-i's/^GSSAPIAuthentication/#&/'/etc/ssh/sshd_configsed-i's/^GSSAPICleanupCredentials/#&/'/etc/ssh/sshd_config# 删除错误的配置行sed-i'/^HostKeyAlgorithms/d'/etc/ssh/sshd_configsed-i'/^PubkeyAcceptedAlgorithms/d'/etc/ssh/sshd_configsed-i'/^KexAlgorithms/d'/etc/ssh/sshd_config# 写入 OpenSSH 9.8 支持的正确兼容配置echo"PubkeyAcceptedAlgorithms +ssh-rsa">>/etc/ssh/sshd_configecho"HostKeyAlgorithms +ssh-rsa">>/etc/ssh/sshd_config# 开启密码登录 + root 登录sed-i's/^#PermitRootLogin.*/PermitRootLogin yes/'/etc/ssh/sshd_configsed-i's/^PasswordAuthentication.*/PasswordAuthentication yes/'/etc/ssh/sshd_configsed-i's/^#PasswordAuthentication.*/PasswordAuthentication yes/'/etc/ssh/sshd_config# 测试配置sshd-t

检查没问题后,重启或者重新加载配置,我这里为了避免重启之后出现断联(模拟生产环境),选择重新加载配置

sshd_pid=$(psaux|grep"/usr/sbin/sshd -D"|grep-vgrep|awk'{print $2}')kill-HUP$sshd_pid

至此,升级工作测试完成,新的会话可以正常连接。

http://www.gsyq.cn/news/1470682.html

相关文章:

  • Hermes Trajectory日志工程:让每一次执行都成为进化数据
  • 毕业论文冲刺必看:这4款工具帮你一键搞定排版、降重和答辩PPT(而且还有答辩对策)
  • 别再为MATLAB摄像头支持包发愁了!用Add-On Explorer一站式安装与管理的完整指南
  • Video2X:免费AI视频超分辨率神器,让模糊视频瞬间变高清的终极解决方案
  • UiPath依赖项恢复失败?试试这个本地包缓存迁移大法(附Package文件夹位置详解)
  • 【2023个人AI助手黄金配置指南】:CPU/GPU/内存/存储四维平衡公式首次公开(附实测性能衰减拐点数据)
  • 国际EMBA排行榜2026最新榜单|顶尖项目实力对比与报考解析
  • 智能债券整合不是选择题,而是生存线(2024Q2全市场AI债券平台渗透率骤降11%的真相)
  • 用Wireshark和Python实战拆解pcap文件:从十六进制到可读数据包的完整解析流程
  • 校园二手书交易|基于SprinBoot+vue的校园二手书交易管理系统(源码+数据库+文档)
  • 2026 SaaS增长:挖掘海外 Affiliate 的 7 个隐藏渠道
  • 2026年智能档案柜品牌排行:杭州RFID工具柜/杭州RFID智能货架/杭州abs柜/杭州a存b取柜/杭州双面柜/选择指南 - 优质品牌商家
  • 如何5分钟搞定Cursor Pro智能激活:终极免费工具完全指南
  • 网络故障排查实战:如何像专家一样阅读PCAP数据包(附真实案例)
  • 2026年龙鱼灯具品牌中显色和稳定性表现较好的有哪些:对比决策与选购清单 - 广州矩阵架构科技公司
  • 2026 年深圳环保全屋定制:5 家放心品牌推荐 - 产品测评官
  • shell编程小工具
  • SI5341寄存器配置避坑指南:如何用ClockBuilder Pro生成配置表并导入Verilog代码
  • KVM虚拟机迁移到VMware ESXi实战:从qemu-img转换到解决dracut启动报错的完整避坑指南
  • AI视频生成新纪元已至(Sora 2雕塑动画化技术白皮书首发)
  • 用Arduino+AD9833信号源,5分钟搞定简易电路特性测试仪的故障检测模块
  • 新手福音:通过快马平台零代码基础体验AI文本情感分析项目
  • OBS Virtual Cam 完全指南:从基础安装到高级应用
  • 如何5分钟搞定中文文献管理:Zotero茉莉花插件的终极指南
  • 避坑指南:STM32F407做FFT逆变换时,数据对齐和内存管理的那些事儿(基于CMSIS-DSP库)
  • CubeIDE隐藏玩法:解锁开源DAP-Link调试能力,像用ST-LINK一样丝滑(基于OpenOCD 0.11.0)
  • 实战应用:利用快马AI为团队批量部署mobaxterm中文环境
  • 保姆级教程:在Ubuntu(TX2)上用C++串口驱动USB-CAN模块控制大疆M3508电机
  • ESP32 TCP通信避坑指南:从Socket创建到稳定连接,手把手教你搞定网络调试助手
  • 5步搭建Sunshine游戏串流服务器:随时随地畅玩3A大作