在离线 OpenEuler-22.03 服务器上升级 OpenSSH 的完整指南

当然可以!以下是一篇结构清晰、语言通俗易懂的技术博客草稿,供你参考和使用:


在离线 OpenEuler-22.03 服务器上升级 OpenSSH 的完整指南

背景介绍

最近在对一台内网的 OpenEuler-22.03 服务器进行安全扫描时,发现其 SSH 版本存在多个高危漏洞,其中甚至包含一个 2024 年披露的 CVE 漏洞。这引起了我们的高度重视。

通过命令查看当前 SSH 版本:

rpm -q openssh

输出结果为:

openssh-8.8p1-32.oe2203sp3.x86_64

而此时 OpenSSH 官方版本已经更新到了 v10,显然我们需要尽快将系统上的 OpenSSH 升级到最新修复版本。

然而,由于该服务器处于内网隔离环境(无网络连接),直接通过 yumdnf 更新是不可能的。而且官方提供的 RPM 包中,只有源码包 .src.rpm 可用,x86 架构的二进制包全部 404。

在这里插入图片描述

在这里插入图片描述

于是我们决定采取“在线编译生成 RPM 包 → 离线安装”的方式完成升级。本文详细记录了整个操作流程与注意事项。


解决思路

由于目标服务器是离线环境,不能直接联网下载依赖或更新包,因此我们采用如下方案:

  1. 在一台具有网络连接的同架构(x86_64)、同系统的机器上,构建 OpenSSH 的 .src.rpm 源码包,生成可用的二进制 .rpm 包。
  2. 将这些 .rpm 包拷贝到目标离线服务器上,进行本地安装。
  3. 验证升级后的 SSH 版本与服务运行状态。

准备工作

下载所需文件

从 OpenEuler 官方镜像站下载最新的源码 RPM 包(确保版本号一致):

openssh-8.8p1-34.oe2203sp3.src.rpm

步骤详解

第一步:安装必要的构建工具

在有网络的机器上,先安装构建 RPM 所需的基础开发工具:

sudo dnf install rpm-build make gcc libtool autoconf automake zlib-devel openssl-devel

如果你无法联网,请提前下载好相关 RPM 包并手动上传安装。


第二步:创建 rpmbuild 工作目录

执行以下命令,创建用于构建 RPM 的标准目录结构:

mkdir -p ~/rpmbuild/{SOURCES,SPECS,RPMS,SRPMS}

第三步:导入 .src.rpm 文件

将下载好的源码包放到 SOURCES 目录下,并安装它以提取 .spec 文件和源代码:

mv openssh-8.8p1-34.oe2203sp3.src.rpm ~/rpmbuild/SOURCES/
rpm -ivh ~/rpmbuild/SOURCES/openssh-8.8p1-34.oe2203sp3.src.rpm

这条命令会自动将 .spec 文件放入 ~/rpmbuild/SPECS/,并将源码解压到 ~/rpmbuild/SOURCES/


第四步:安装构建所需的依赖项

进入 SPECS 目录,尝试安装构建依赖:

cd ~/rpmbuild/SPECS
sudo dnf builddep openssh.spec

如果提示某些依赖找不到,可能需要手动下载对应的 RPM 包并上传安装。


第五步:开始构建二进制 RPM 包

使用 rpmbuild 命令开始构建:

rpmbuild -ba openssh.spec

成功后,你会在 ~/rpmbuild/RPMS/x86_64/ 目录下看到多个生成的 RPM 包,例如:

openssh-8.8p1-34.oe2203sp3.x86_64.rpm
openssh-server-8.8p1-34.oe2203sp3.x86_64.rpm
openssh-clients-8.8p1-34.oe2203sp3.x86_64.rpm
...

第六步:将生成的 RPM 包传输至离线服务器

你可以使用 SCP、U盘、或者任何其他方式将这些 RPM 包传送到目标离线服务器上。


---

### 第七步:在离线服务器上安装 RPM 包

登录离线服务器,解压并安装 RPM 包:

```bash
tar zxvf /root/offline_ssh_rpms.tar
cd /root
rpm -Uvh *.rpm

也可以使用 dnf 安装:

dnf install *.rpm

第八步:验证安装结果

重启 SSH 服务:

systemctl restart sshd

检查新版本:

rpm -q openssh

你应该看到类似如下输出:

openssh-8.8p1-34.oe2203sp3.x86_64

同时可以使用以下命令确认 SSH 实际运行版本:

ssh -V

输出应为:

OpenSSH_8.8p1, OpenSSL 1.xx.x ...

注意事项

  • 备份原配置文件:升级前建议备份 /etc/ssh/ 下的所有配置文件,避免升级过程中被覆盖。
  • 不要中断 SSHD 服务:升级期间请勿关闭或中断 SSH 服务,否则可能导致无法远程登录。
  • 测试环境先行:建议先在测试环境中验证流程后再操作生产服务器。
  • 保留旧包:保留原始的 RPM 包,以便回滚使用。

总结

通过本文的方法,即使是在完全断网的环境下,我们也能够顺利地完成 OpenSSH 的版本升级,有效修复已知的安全漏洞。

整个过程的核心思想是:

在联网机器上构建 RPM 包,再将构建结果拷贝到离线机器上进行安装”。

这种方法不仅适用于 OpenSSH,也适用于其他需要源码编译但又受限于网络的场景,具备良好的通用性和可扩展性。


### 基于TensorFlow实现花朵三分类模型 为了实现一个基于TensorFlow的花朵三分类模型,可以按照以下方法设计并完成整个流程。以下是详细的说明: #### 1. 数据准备 在开始之前,需要准备好训练数据和测试数据。假设我们已经有一个包含三种不同类别花朵的数据集,并将其分为训练集和验证集。 ```python import tensorflow as tf from tensorflow.keras.preprocessing.image import ImageDataGenerator img_size = (224, 224) # 定义输入图片尺寸 batch_size = 32 # 批次大小 # 创建ImageDataGenerator对象进行数据增强和预处理 data_gen = ImageDataGenerator( rescale=1./255, validation_split=0.2, # 划分20%作为验证集 ) # 加载训练集 train_data = data_gen.flow_from_directory( 'D:/LearnMSA/flower/train/', # 训练数据路径 target_size=img_size, batch_size=batch_size, class_mode='categorical', # 使用多类别的one-hot编码 subset='training' # 指定为训练子集 )[^1] # 加载验证集 val_data = data_gen.flow_from_directory( 'D:/LearnMSA/flower/train/', target_size=img_size, batch_size=batch_size, class_mode='categorical', subset='validation' # 指定为验证子集 )[^1] ``` #### 2. 构建卷积神经网络模型 接下来定义一个简单的卷积神经网络(CNN)结构来进行三分类任务。 ```python model = tf.keras.Sequential([ tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(224, 224, 3)), tf.keras.layers.MaxPooling2D((2, 2)), tf.keras.layers.Conv2D(64, (3, 3), activation='relu'), tf.keras.layers.MaxPooling2D((2, 2)), tf.keras.layers.Conv2D(128, (3, 3), activation='relu'), tf.keras.layers.MaxPooling2D((2, 2)), tf.keras.layers.Flatten(), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dense(3, activation='softmax') # 输出层,对应三个类别 ]) model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) ``` #### 3. 模型训练 配置好模型之后,就可以开始训练了。 ```python history = model.fit( train_data, epochs=10, # 设定训练轮数 validation_data=val_data # 验证数据 ) ``` #### 4. 模型保存与加载 训练完成后,可以将模型保存到指定路径以便后续使用。 ```python model.save('D:/LearnMSA/flower/model/flower_model.h5') ``` 如果需要重新加载已保存的模型,则可以通过以下方式操作: ```python loaded_model = tf.keras.models.load_model('D:/LearnMSA/flower/model/flower_model.h5') ``` #### 5. 测试模型 最后,在实际应用中可以用新采集的一张或多张图片来测试模型的效果。 ```python test_image_path = 'D:/LearnMSA/flower/test/sunflower.jpg' img = tf.keras.utils.load_img(test_image_path, target_size=(224, 224)) input_arr = tf.keras.utils.img_to_array(img) input_arr = np.array([input_arr]) / 255. predictions = loaded_model.predict(input_arr) predicted_class = np.argmax(predictions, axis=-1) print(f"Predicted Class Index: {predicted_class}") ``` --- ### 总结 上述代码展示了如何利用TensorFlow框架搭建一个针对花朵三分类的任务模型[^3]。从数据读取、模型构建到最终部署都进行了详细介绍。此方案适用于初学者快速上手深度学习中的图像分类问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值