升级OpenSSH到最新9.5p1版本以修复等保扫描安全漏洞【CentOS及银河麒麟V10测试成功】

艺帆风顺 发布于 2025-04-03 48 次阅读


快速脚本升级【适用于服务器可联网状态】

    yum install -y gitcd /rootgit clone https://gitee.com/qqmiller/openssh-9.5p1-.x86_64.gitcd openssh-9.5p1-.x86_64/bash openssh_update.sh

    重启sshd:

    systemctl restart sshd

    查看sshd状态:

    systemctl status sshd

    一、需求背景

        项目等保被扫描出安全漏洞,需要升级ssh到最新版本9.5p1。

    二、升级Openssl到1.1.1版本

    1、查看当前openssh版本

        ssh -V

      [root@localhost ~]# ssh -VOpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017

      2、Openssh最新版需要先升级openssl到1.1.1版本或以上

          确保基础编译及依赖环境已安装。

        yum install gccyum install zlib-develyum install openssl-develyum install -y net-tools.x86_64

        3、下载解压

        wget https://www.openssl.org/source/openssl-1.1.1c.tar.gz    

        tar -zxvf openssl-1.1.1c.tar.gz

        4、编译安装

        cd openssl-1.1.1c/

        ./config --prefix=/usr/local/openssl

        make && make install

        5、配置环境

        备份原版本:mv /usr/bin/openssl /usr/bin/openssl.bak

        建立软连接# ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl

        加载动态库:echo "/usr/local/openssl/lib" >> /etc/ld.so.conf

        使配置生效:ldconfig

        查看版本:openssl version

                OpenSSL 1.1.1c  28 May 2019

        三、升级OpenSSH

        报错1:

          [root@localhost SPECS]# rpmbuild -ba openssh.spec错误:构建依赖失败: openssl-devel .1 被 openssh-9.5p1-1.el7.x86_64 需要 libXt-devel 被 openssh-9.5p1-1.el7.x86_64 需要 imake 被 openssh-9.5p1-1.el7.x86_64 需要 gtk2-devel 被 openssh-9.5p1-1.el7.x86_64 需要

          解决:
           yum install openssl-devel libXt-devel imake gtk2-devel

          报错2:

            [root@localhost SPECS]# rpmbuild -ba openssh.spec错误:构建依赖失败: openssl-devel .1 被 openssh-9.5p1-1.el7.x86_64 需要

            解决:sed -i 's/BuildRequires: openssl-devel

            报错3

              checking for OpenSSL_version_num... nochecking OpenSSL library version... configure: error: OpenSSL >= 1.1.1 required (have "100020bf (OpenSSL 1.0.2k-fips 26 Jan 2017)")错误:/var/tmp/rpm-tmp.XTbXUN (%build) 退出状态不好

              RPM 构建错误: /var/tmp/rpm-tmp.XTbXUN (%build) 退出状态不好

              解决:

                  暂未解决。

              开始升级#

              备份配置文件#

              # cp /etc/pam.d/{sshd,sshd.bck}
              # cp /etc/ssh/{sshd_config,sshd_config.bck}

              安装telnet#

              避免 openssh 升级识别无法登陆,安装telnet(同时开启两个窗口)

              # yum install telnet-server xinetd -y
              # systemctl enable --now xinetd.service
              # systemctl enable --now telnet.socket

              配置 telnet 登陆

              //注释auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so这一行

              # sed -i 's/^auth [user_unknown=/#&/' /etc/pam.d/login

              # cat >> /etc/securetty
              pts/1
              pts/2
              EOF

              //测试登陆
              [C:~]$ telnet 192.168.3.179
              Trying 192.168.3.179...
              Connected to 192.168.3.179.
              Escape character is '^]'.

              Kernel 3.10.0-957.27.2.el7.x86_64 on an x86_64
              localhost0 login: root
              Password:
              Last login: Thu Dec 31 15:28:23 from 192.168.3.144
              [root@localhost0 ~]#

              安装新版本#

              更新openssh版本

              # yum update ./openssh* -y

              启动ssh服务#

              恢复备份的配置文件,并重启sshd

              # mv /etc/ssh/sshd_config.bck /etc/ssh/sshd_config
              # mv /etc/pam.d/sshd.bck /etc/pam.d/sshd

              # sed -i '/.*PermitRootLogin.*/d' /etc/ssh/sshd_config
              # echo -e 'nPermitRootLogin yes' >> /etc/ssh/sshd_config
              # sed -i '/.*PasswordAuthentication.*/d' /etc/ssh/sshd_config
              # echo -e 'nPasswordAuthentication yes' >> /etc/ssh/sshd_config

              # chmod 600 /etc/ssh/*
              # systemctl restart sshd

              验证登陆#

              新开窗口连接登陆测试,没有问题后再进行下面的关闭telnet步骤。

              注意:请勿关闭当前窗口,另外新开窗口连接没问题,再关闭。

              关闭 telnet#

              注意:开启telnetroot远程登录极度不安全,账号密码都是明文传输,尤其在公网,所以一般只限于在某些情况下内网中ssh无法使用时,临时调测,使用完后,将相关配置复原,彻底关闭telnet服务!

              # systemctl stop telnet.socket && systemctl disable telnet.socket
              # systemctl stop xinetd.service && systemctl disable xinetd.service

              验证当前版本#

              # ssh -V
              OpenSSH_8.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017

              build脚本#

              该脚本用于制作openssh rpm

              使用方法:rpmbuild_openssh.sh 8.4

              #!/usr/bin/env bash
              # @Date :2021/1/1 15:13
              # @Author :ives
              # @Email :381347268@qq.com
              # @File :rpmbuild_openssh.sh
              # @Desc :制作openssh rpm软件包,通过tar包build

              openssh_version=$1
              #判断是否传入正确的软件包
              if [ "${openssh_version}" ] ;then
              echo -e "33[41;37m当前build的openssh版本为: ${openssh_version}33[0m"
              else
              echo "常用版本有:8.0, 8.1, 8.2, 8.3, 8.4"
              echo
              echo -e " 请输入需要build的openssh版本号 示例: 33[36;1m$0 8.433[0m"
              exit 1
              fi

              # 安装依赖
              function install_dependency() {
              yum install -y wget rpm-build zlib-devel openssl-devel gcc perl-devel pam-devel unzip libXt-devel imake gtk2-devel openssl-libs >> /dev/null && sleep 3
              }

              # 下载软件包
              function download_package() {
              mkdir -p /root/rpmbuild/{SOURCES,SPECS}
              cd /root/rpmbuild/SOURCES
              echo -e "33[34;1m开始下载软件包:openssh-${openssh_version}p1.tar.gz 33[0m"
              wget http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-${openssh_version}p1.tar.gz >> /dev/null && echo "openssh-${version}p1.tar.gz下载成功..."
              if [ $? -ne 0 ]; then
              echo "openssh-${openssh_version}p1.tar.gz下载失败...请检查网络环境或版本是否存在"
              exit 2
              else
              echo -e "33[34;1m开始下载软件包:x11-ssh-askpass-1.2.4.1.tar.gz 33[0m"
              wget https://src.fedoraproject.org/repo/pkgs/openssh/x11-ssh-askpass-1.2.4.1.tar.gz/8f2e41f3f7eaa8543a2440454637f3c3/x11-ssh-askpass-1.2.4.1.tar.gz >> /dev/null && echo "x11-ssh-askpass-1.2.4.1.tar.gz下载成功..." && sleep 3
              if [ $? -ne 0 ]; then
              echo "x11-ssh-askpass-1.2.4.1.tar.gz下载失败...请检查网络环境是否正常"
              exit 2
              else
              tar -xf openssh-8.4p1.tar.gz && tar -xf x11-ssh-askpass-1.2.4.1.tar.gz
              fi
              fi
              }

              # 修改配置文件和build
              function config_and_build() {
              cp openssh-8.4p1/contrib/redhat/openssh.spec /root/rpmbuild/SPECS/
              sed -i -e "s/%define no_x11_askpass 0/%define no_x11_askpass 1/g" /root/rpmbuild/SPECS/openssh.spec
              sed -i -e "s/%define no_gnome_askpass 0/%define no_gnome_askpass 1/g" /root/rpmbuild/SPECS/openssh.spec
              sed -i 's/BuildRequires: openssl-devel /root/rpmbuild/SPECS/openssh.spec
              cd /root/rpmbuild/SPECS
              echo -e "33[34;1m开始制作 openssh${openssh_version} 相关rpm软件包 33[0m"
              rpmbuild -ba openssh.spec
              if [ $? -eq 0 ]; then
              echo -e "33[34;1mopenssh${openssh_version} 相关rpm软件包制作成功,生成的软件包信息如下:33[0m"
              echo
              echo -e "33[33;1m软件包存放路径:/root/rpmbuild/RPMS/x86_64/ 33[0m" && ls /root/rpmbuild/RPMS/x86_64/
              else
              echo -e "33[33;1mopenssh${openssh_version} 相关rpm软件包制作失败,请根据报错信息进行解决,再重新进行编译 33[0m"
              fi
              }

              function main() {
              install_dependency
              download_package
              config_and_build
              }
              main

              特别说明:

              1)将该教程命令中的8.4p1替换为9.5p1,步骤按照该教程操作。

              2)建议先临时开启telnet登陆服务,避免SSH升级失败无法连接服务器,升级成功后再关闭,同时至少建立3个连接会话,在升级成功前不要断开会话。

                版权声明:本文内容始发于博客园>作者:别来无恙-,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。始发链接:https://www.cnblogs.com/yanjieli/p/14220914.html在此特别鸣谢原作者的创作。此篇文章的所有版权归原作者所有,商业转载建议请联系原作者,非商业转载请注明出处。