centos7升级openssh9.7p1

场景:因服务器漏扫报告,提示一堆openssh漏洞问题,且涉及服务器较多,故准备升级所有服务器的openssh至最新的版本,因情况不一样,本文不一定适用所有情况,所以仅供参考

注:前提:因升级openssh需要下载更新关联的包太多,离线下载更新异常麻烦,因此,本文是在服务器可访问互联网的前提下进行升级的,满足不了这个前提的小伙伴可以忽略本文了,我升级生产环境也是申请的临时访问互联网权限才完成的升级。

升级前的准备:

官网下载openssh:

https://www.openssh.com/releasenotes.html

或:https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/

下载openssl:

https://github.com/openssl/openssl/releases?page=2

1、查看centos7、ssh以及openssl的版本信息

# 查看CentOS系统版本信息
cat /etc/redhat-release
# 查看openssl版本信息
openssl version
# 查看openssh的版本信息
ssh -V

(openssh7.*版本升级到9.7p1也可以这么升级,已验证)

2、yum安装相关依赖:

# 安装相关的依赖项,如果有遗漏再次运行命令安装一遍
yum -y install gcc pam-devel zlib-devel openssl-devel net-tools

3、安装openssl-1.1.1w

因openssh9.7p1要求openssl版本大于等于1.1.1,因此需要升级安装openssl。

3.1解压openssl-1.1.1w至/usr/local

tar zxvf openssl-1.1.1w.tar.gz -C /usr/local/
#(如果没有提示tar命令,执行 sudo yum install tar 命令安装一下tar命令)
#查看解压后目标情况
ll /usr/local/ |grep openssl
#进入解压后的目录
cd /usr/local/openssl-1.1.1w/

3.2安装openssl前的准备

#创建openssl的安装目录
mkdir /opt/openssl
#安装前确认openssl的旧版本
openssl version

3.3编译安装openssl-1.1.1w

# 配置编译和安装过程,"--prefix=" 选项配置安装目录
./config --prefix=/opt/openssl
# 构建程序以及所需的指令和依赖关系(等待时间有点长)
make
# 安装编译好的openssl-1.1.1w(等待时间有点长)
make install

# 注:以上三步必须没有出现报错(error),才可以继续下一步,全部无报错才能视为安装成功

./config --prefix=/opt/openssl执行成功情况参考图:

make执行成功参考图:

make install之后参考图:

3.4更新lib文件

# 检查openssl-1.1.1w所需要的函数库
ldd /opt/openssl/bin/openssl
# 添加openssl-1.1.1w的库文件路径到ld.so.conf
echo "/opt/openssl/lib" >> /etc/ld.so.conf
# 更新系统函数库
ldconfig -v
# 绝对路径查看openssl版本
ldd /opt/openssl/bin/openssl

前后对比图:

3.5更新bin文件

# 查看旧版本的openssl命令路径
which openssl
# 重命名为openssl.old
mv /usr/bin/openssl /usr/bin/openssl.old   #重命名openssl文件
# 使用软连接的方式更新openssl命令
ln -s /opt/openssl/bin/openssl /usr/bin/openssl
# openssl命令查看新安装版本号
openssl version

至此openssl安装成功

4、编译安装openssh9.7p1

4.1 编译安装前的准备

#有条件的安装telnet并连接至服务器,防止安装失败连不上服务器,如果是云服务器,提前做好快照,方便升级#失败时还原,我这里是云服务器,没有telnet,就不再写了,网上一搜一堆

# 卸载openssh的旧的rpm包(执行这一步命令之前请确认你已经做好了连不上服务器的准备)
for i in $(rpm -qa | grep openssh);do rpm -e $i --nodeps;done
# 解压缩openssh9.7p1包到目标目录
tar zxvf /root/openssh-9.7p1.tar.gz -C /usr/local/
# 进入openssh9.7p1的源码目录
cd /usr/local/openssh-9.7p1/
# 安装前可以查看一下安装文件INSTALL
more INSTALL

4.2编译安装openssh9.7p1

# 配置编译和安装过程,"--prefix=" 配置安装目录,"--sysconfdir=" 配置文件路径,"--with-ssl-dir=" openssl的安装路径
./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-pam --with-ssl-dir=/opt/openssl --with-md5-passwords --mandir=/usr/share/man --with-zlib=/usr/local/zlib --without-hardening
# 构建程序以及所需的指令和依赖关系
make
# 安装编译好的openssh9.7p1
make install
这里如果make install报
Permissions 0640 for '/etc/ssh/ssh_host_ed25519_key' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
sshd: no hostkeys available -- exiting.
make: [check-config] Error 1 (ignored)
的错误,执行以下命令:
chmod 600 /etc/ssh/*
然后再次执行make install

# 注:以上三步必须没有出现报错(error),才可以继续下一步,全部无报错才能视为安装成功

执行./configure.....之后成功的参考图:

make成功之后的参考图:

make install成功之后的参考图:

4.3复制并修改启动sshd.init脚本

# 从源码目录下复制sshd.init到/etc/init.d/
cp /usr/local/openssh-9.7p1/contrib/redhat/sshd.init /etc/init.d/

## 查看并修改SSHD的新路径,将新的openssh安装路径更新进去
cat /etc/init.d/sshd.init | grep SSHD
sed -i "s/SSHD=\/usr\/sbin\/sshd/SSHD=\/usr\/local\/openssh\/sbin\/sshd/g" /etc/init.d/sshd.init
cat /etc/init.d/sshd.init | grep SSHD

## 查看并修改ssh-keygen的新路径,将新的ssh-keygen安装路径更新进去
cat -n /etc/init.d/sshd.init | grep ssh-keygen
sed -i "s#/usr/bin/ssh-keygen -A#/usr/local/openssh/bin/ssh-keygen -A#g" /etc/init.d/sshd.init
cat -n /etc/init.d/sshd.init | grep ssh-keygen

4.4 修改配置文件(sshd_config)

# 开启允许X11转发
echo 'X11Forwarding yes' >> /etc/ssh/sshd_config
# 开启允许密码验证
echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config

4.5 启动openssh,并设置开机启动

# 复制ssh的相关命令
cp -arp /usr/local/openssh/bin/* /usr/bin/
# 启动sshd服务
/etc/init.d/sshd.init start
# 查看版本
ssh -V
# 添加开机启动
chmod +x /etc/rc.d/rc.local
echo "/etc/init.d/sshd.init start" >> /etc/rc.d/rc.local

4.6 测试openssh连接

#使用ssh协议连接centos7,检查openssh9.7p1服务
#重启系统后ssh协议登录centos7,检查openssh9.7p1自动启动
#如果root账户登录不上去的话创建一个子账户,比如:
sudo useradd test
sudo passwd test
#然后使用子账户登录 通过su命令切换到root账户

5、如果开始之前启用了telnet,在这里卸载telnet服务

# 确认openssh升级成功,连接无异常后卸载telnet服务
yum -y remove telnet telnet-server

6、检查系统、openssl和openssh的版本信息

# 查看openssl版本信息
openssl version
# 查看openssh的版本信息
ssh -V

至此,centos7升级openssh9.7p1升级完毕,已亲身使用生产服务器验证过,漏洞也解决了,希望能给各位小伙伴带来帮助ღ( ´・ᴗ・` )比心。

  • 18
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值