linux公有云主机ssh升级(以openEuler22.03为例)

为什么要升级ssh

openssh作为使用最为广泛的linux下ssh程序,一旦被挖掘出危险漏洞(CVE)就很容易影响生产、资产的安全,因此即使根据披露出的CVE找到对应的解决方法很关键。
而升级openssh版本,是解决cve一个最方便最有效的方法之一。

怎么查看CVE

可以通过各大厂商的cve披露网站,如阿里云的:阿里云漏洞库
在这里插入图片描述
这个网站披露了很多CVE漏洞,并提供了一定的解决方法,如搜索openssh的cve
在这里插入图片描述
在这里插入图片描述

如上图,就推荐将openssh升级到9.8p1的版本。

升级ssh有两种方式:

  • 第一种:找到对应版本的rpm包,直接通过rpm工具进行升级。
  • 第二种:通过下载官网最新的源码包,通过源码包升级。

rpm包和源码包最大的区别就在于,源码包是实时更新的,而且可以自定义安装路径和功能。如果要想下载最新版本的软件,最好是通过源码包进行编译安装
这里的升级OpenSSH我们将使用源码包进行升级。
同时操作系统的环境为openEuler22.03sp2

如何查找新版本的openssh

那么如何搜索到最新的/需要的软件版本?
也推荐使用各大厂商的镜像站,如阿里云的:阿里巴巴开元镜像站
在这里插入图片描述

OpenSSH

openssh实际是openBSD下的一个运用广泛的ssh实现,因此openssh是挂载openBSD之下的。
我们可以通过在镜像站搜索openbsd后查找到openssh
在这里插入图片描述
进入openssh后,还有两种不同的tar.gz的源码包:

  • openbsd/openssh/下的这个源码包,是openbsd架构的版本包;
  • openbsd/openssh/portable/下的这个源码包,是可移植的openssh源码包,我们使用这个,便于在openEuler中使用。
    在这里插入图片描述

这个就是我们待会需要安装的源码包,右键复制链接
在这里插入图片描述
在这里插入图片描述

在OpenBSD的源代码树中,openssh 是一个经常被提及的例子,因为它是一个广泛使用的开源安全外壳协议(SSH)的实现,而且它确实具有很好的可移植性。如果你在 portable/ 目录下发现了一个 opensshtar.gz 包,同时在它的父目录也有一个 tar.gz 包,这可能有以下几个原因:

  1. OpenBSD版本与可移植版本
    • portable/ 目录下的 tar.gz 包通常包含了 openssh 的可移植代码,这意味着这个包是为了在其他类Unix系统上编译和运行 openssh 而准备的。它包含了必要的兼容性层和补丁,使得 openssh 能够在不同的操作系统上工作。
    • portable/ 目录的父目录(可能是 src/ 目录下的某个位置)的 tar.gz 包可能是OpenBSD专用的 openssh 版本。这个版本可能包含了特定于OpenBSD的特性和优化。
  2. 版本差异
    • 有时候,portable/ 目录下的 tar.gz 包可能代表了一个较旧或者较新的版本,而父目录下的包则是为OpenBSD当前版本特别维护的版本。这种情况可能发生在OpenBSD的开发过程中,当上游的 openssh 有更新时,OpenBSD的开发者可能还没有将这些更新应用到他们的系统上。
  3. 维护和更新流程
    • OpenBSD的开发者可能会定期从 portable/ 目录下的可移植版本更新OpenBSD专用的 openssh 包。这意味着 portable/ 目录下的包可能是一个参考点,用于将更新和修复合并到OpenBSD的官方版本中。
  4. 构建和分发
    • 在构建过程中,可能需要从 portable/ 目录下的包中提取代码,然后应用OpenBSD特定的补丁和配置,以生成最终的包,这个包会被放在父目录下。
      总之,这两个 tar.gz 包的存在是为了满足不同的需求:一个是通用的、可移植的 openssh 版本,另一个是专门为OpenBSD优化的版本。用户和系统管理员可以根据自己的需求选择使用哪个包。

升级ssh步骤

1. 下载源码包

wget https://mirrors.aliyun.com/openssh/portable/openssh-9.8p1.tar.gz
# 该路径如何获取已在上一部分进行了介绍
# 这种方式需要你的主机能访问公网,本文介绍的是公有云主机,因此可以访问公网

在这里插入图片描述

基本上本机上有成功运行的ssh时,不会缺少运行ssh的软件包openssl-devel zlib-devel
但是源码安装,需要gcc、make等包,没有的话需要安装

yum install -y gcc make

2. 备份旧文件防止升级失败

mkdir /tmp/ssh-bak
cd /tmp/ssh-bak/

[rcp -a /etc/ssh .
cp -a /etc/pam.d .
cp -a /usr/lib/systemd/system/sshd.service .
cp -a /usr/bin/ssh ./ssh.bak
cp -a /usr/sbin/sshd ./sshd.bak

[root@ecm-98ce ssh-bak]# ls
pam.d  ssh  ssh.bak  sshd.bak  sshd.service

# /etc/ssh为ssh的核心配置目录
# /etc/pam.d/sshd为ssh是否支持pam认证
# /usr/lib/systemd/system/sshd.service是ssh的服务单元配置文件,可以使用systemd管理  
# /usr/bin/ssh 是ssh的可执行文件
# 以上最核心的是/etc/ssh,保存你的系统原来的所有ssh配置信息

由于是云主机,修改过默认是ssh端口,因此查看一下ssh的端口以便后续直接使用而不用放行安全组

 cat /etc/ssh/sshd_config | grep -i port

3. 停止并卸载旧ssh

systemctl stop sshd
# 注意,停止后需要退出已经登陆着的用户,才可以完全停止ssh

rpm -e --nodeps `rpm -qa | grep openssh`
# 先查询openssh的已安装文件,再忽略依赖关系强制卸载

4. 解压、编译、编译安装新ssh

如果无法安装,可能需要升级openssl和zlib等相关依赖的版本

# 解压
tar -xvf openssh-9.8p1.tar.gz

# 进入目录
cd openssh-9.8p1/

# 预编译
./configure --prefix=/usr --sysconfdir=/etc/ssh   
# --prefix=/usr 指定二进制程序安装路径   
# --sysconfdir  指定主配置文件安装路径   
# 这一步会检查当前系统的工具和依赖,如果没有通过请安装对应的工具和依赖再执行一次

在这里插入图片描述

# 编译
make

# 编译安装
make install

在这里插入图片描述

在这里插入图片描述

如果在编译时出现以下报错,可能的原因是密钥文件权限过大,可以修改成600再编译
在这里插入图片描述

chmod 600 /etc/ssh/ssh*key

可以通过ssh -V查看已经安装成功
在这里插入图片描述

5. 修改systemd文件以便systemctl使用sshd

将之前备份的systemd的sshd.service文件拷贝回原本的位置

cp /tmp/ssh-bak/sshd.service /usr/lib/systemd/system/

在这里插入图片描述

在这里插入图片描述

6. 测试

在/etc/ssh/sshd_config中,修改Port为升级前原本记录下来的ssh服务端口,即可不用开22的安全组就能直接访问(前提:之前已经开放了对应Port的安全组条目permit权限)

# 修改ssh端口
echo "Port xxxxx" >> /etc/ssh/sshd_config

# 允许root远程登录
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config

# 重启服务
systemctl restart sshd

在这里插入图片描述

在这里插入图片描述
使用远程登陆工具成功ssh登录云主机,试验结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值