• 《Linux运维总结:Centos7.6之OpenSSH7.4升级版本至9.4》


    一、环境信息

    操作系统:Centos7.6.1810
    OpenSSH_7.4p1, OpenSSL 1.0.2k-fips

    如下图所示:
    在这里插入图片描述

    注意:升级后由于加密算法的区别,低版本的SSH工具可能无法连接,建议改用Xshell7或SecureCRT9.0以上版本。


    二、注意事项

    1、检查防火墙或selinux是否关闭
    2、建议安装telnet,防止ssh安装失败无法连接
    3、新前一定要多开1个或1个以上ssh终端,一旦更新失败当前shell终端是无法操作的,也就无法进行版本回退
    4、升级前一定要对ssh进行备份,避免更新失败时能回滚
    5、升级前一定要提前在测试环境验证,运行一段时间,确认没有问题才可在生产环境进行更新操作。
    6、对于生产环境主机数量比较多时,建议先在1台或几台服务器上更新,运行一段时间,确认没有问题再执行批量更新操作。

    总结:对于以上需要注意的内容,建议大家务必重视,小心谨慎总没错的。


    三、升级步骤

    OpenSSH9.4源码包资源合集

    3.1、安装telnet

    注意:安装telnet,防止ssh安装失败无法连接。

    1、安装Telnet

    注意:一般Linux系统自带Telnet客户端,我们只需要安装服务端即可;另外Telnet运行需要依靠xinetd组件,安装命令如下所示:

    yum install telnet-server.x86_64 xinetd.x86_64 -y
    
    • 1

    2、运行telnet服务

    systemctl enable telnet.socket
    systemctl start telnet.socket
    systemctl start xinetd
    systemctl status telnet.socket
    
    • 1
    • 2
    • 3
    • 4

    3、移除文件

    注意:Linux系统中默认不允许root账户telnet远程登录,这里需要移除配置文件,保证root账户能够远程登录。

    mv /etc/securetty /etc/securetty.bak
    
    • 1

    4、使用telnet协议连接服务器,如下图所示:
    在这里插入图片描述


    3.1、准备工作

    1、安装依赖

    yum install -y gcc gcc-c++ perl perl-IPC-Cmd pam pam-devel
    
    • 1

    2、下载tar包并解压

    cd /usr/local/src
    wget https://www.openssl.org/source/openssl-3.1.0.tar.gz --no-check-certificate
    wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.4p1.tar.gz 
    wget http://www.zlib.net/zlib-1.2.13.tar.gz
    tar axf openssh-9.4p1.tar.gz && tar axf openssl-3.1.0.tar.gz && tar axf zlib-1.2.13.tar.gz
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.2、备份文件

    1、备份openssl

    mv /usr/bin/openssl /usr/bin/openssl.old
    
    • 1

    2、备份openssh

    mv /etc/ssh /etc/ssh.bak
    mkdir /usr/bin/bak
    \cp -arpf /usr/bin/{cp,sftp,ssh,ssh-add,ssh-agent,ssh-keygen,ssh-keyscan} /usr/bin/bak/
    \cp -arpf /usr/sbin/sshd /usr/sbin/sshd.bak
    \cp -arpf /etc/sysconfig/sshd /etc/sysconfig/sshd.bak
    \cp -arpf /etc/pam.d/sshd /etc/pam.d/sshd.bak
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    说明:如果cp、sftp、ssh、ssh-add、ssh-agent、ssh-keygen、ssh-keyscan等二进制文件是软连接,这里就不需要备份,请直接删除这些软连接,后续如果还原的时候请从这些文件的源路径里拷贝即可。当前环境不是软连接,所以对这些二进制文件进行备份。

    如下图所示:
    在这里插入图片描述


    3.3、编译安装zlib

    cd zlib-1.2.13
    ./configure --prefix=/usr/local/zlib-1.2.13 && make -j 4 && make install
    
    • 1
    • 2

    3.4、编译安装openssl

    1、编译安装

    cd openssl-3.1.0
    ./config --prefix=/usr/local/openssl-3.1.0 && make -j 4 && make install
    
    • 1
    • 2

    2、编辑ld.so.conf文件

    echo '/usr/local/openssl-3.1.0/lib64' >> /etc/ld.so.conf
    ldconfig && ldconfig -v
    
    • 1
    • 2

    3、创建操作系统软链接

    ln -s /usr/local/openssl-3.1.0/bin/openssl /usr/bin/openssl
    ln -s /usr/local/openssl-3.1.0/include/openssl /usr/include/openssl
    ll -s /usr/bin/openssl
    ll -s /usr/include/openssl
    
    • 1
    • 2
    • 3
    • 4

    4、检查Openssl版本

    openssl version
    OpenSSL 3.1.0 14 Mar 2023 (Library: OpenSSL 3.1.0 14 Mar 2023)
    
    • 1
    • 2

    3.5、编译安装openssh

    1、编译安装
    注意:在configure openssh时,可以去掉–with-pam编译参数。

    cd openssh-9.4p1
    ./configure --prefix=/usr/local/openssh-9.4p1 --sysconfdir=/etc/ssh --with-pam \
    --with-ssl-dir=/usr/local/openssl-3.1.0 --with-zlib=/usr/local/zlib-1.2.13 --without-hardening 
    make && make install
    #或者
    cd openssh-9.4p1
    ./configure --prefix=/usr/local/openssh-9.4p1 --sysconfdir=/etc/ssh  \
    --with-ssl-dir=/usr/local/openssl-3.1.0 --with-zlib=/usr/local/zlib-1.2.13 --without-hardening 
    make && make install
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2、替换新版本openssh相关命令

    \cp -arpf /usr/local/openssh-9.4p1/bin/scp /usr/bin/
    \cp -arpf /usr/local/openssh-9.4p1/bin/sftp /usr/bin/
    \cp -arpf /usr/local/openssh-9.4p1/bin/ssh /usr/bin/
    \cp -arpf /usr/local/openssh-9.4p1/bin/ssh-add /usr/bin/
    \cp -arpf /usr/local/openssh-9.4p1/bin/ssh-agent /usr/bin/
    \cp -arpf /usr/local/openssh-9.4p1/bin/ssh-keygen /usr/bin/
    \cp -arpf /usr/local/openssh-9.4p1/bin/ssh-keyscan /usr/bin/
    \cp -arpf /usr/local/openssh-9.4p1/sbin/sshd /usr/sbin/sshd
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3、拷贝启动脚本

    \cp -a contrib/redhat/sshd.init /etc/init.d/sshd
    \cp -a contrib/redhat/sshd.pam /etc/pam.d/sshd.pam
    chmod +x /etc/init.d/sshd
    mv /usr/lib/systemd/system/sshd.service /usr/lib/systemd/system/sshd.service.bak
    
    • 1
    • 2
    • 3
    • 4

    5、修改配置文件

    vi /etc/ssh/sshd_config
    PermitRootLogin yes
    PasswordAuthentication yes
    UsePAM no
    UseDNS no
    
    • 1
    • 2
    • 3
    • 4
    • 5

    6、设置开机启动,并验证版本

    systemctl daemon-reload
    systemctl enable sshd.socket
    sshd -t
    systemctl restart sshd
    ssh -V
    OpenSSH_9.4p1, OpenSSL 3.1.0 14 Mar 2023
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    注意:在configure openssh时,有设置参数 –with-pam,在此之后登录服务器时,会发生登陆失败的问题。

    解决方法一如下:

    vi /etc/ssh/sshd_config
    UsePAM no
    
    • 1
    • 2

    解决方法二如下:

    # 备份原文件/etc/pam.d/sshd,将以下内容覆盖写入/etc/pam.d/sshd
    vim /etc/pam.d/sshd
    #%PAM-1.0
    auth       substack     password-auth
    auth       include      postlogin
    account    required     pam_sepermit.so
    account    required     pam_nologin.so
    account    include      password-auth
    password   include      password-auth
    # pam_selinux.so close should be the first session rule
    session    required     pam_selinux.so close
    session    required     pam_loginuid.so
    # pam_selinux.so open should only be followed by sessions to be executed in the user context
    session    required     pam_selinux.so open env_params
    session    required     pam_namespace.so
    session    optional     pam_keyinit.so force revoke
    session    optional     pam_motd.so
    session    include      password-auth
    session    include      postlogin
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    六、版本回退

    回滚前:

    [root@localhost ~]# ssh -V
    OpenSSH_9.4p1, OpenSSL 3.1.0 14 Mar 2023
    
    • 1
    • 2

    回滚操作:

    1、回滚openssl

    rm -f /usr/bin/openssl 
    mv /usr/bin/openssl.old /usr/bin/openssl 
    openssl version
    OpenSSL 1.0.2k-fips  26 Jan 2017
    
    • 1
    • 2
    • 3
    • 4

    2、回滚openssh

    2.1、恢复/etc/ssh目录

    rm -rf /etc/ssh 
    mv /etc/ssh.bak /etc/ssh 
    
    • 1
    • 2

    2.2、恢复cp、sftp、ssh、ssh-add、ssh-agent、ssh-keygen、ssh-keyscan命令

    \cp -arpf /usr/bin/bak/cp /usr/bin/cp
    \cp -arpf /usr/bin/bak/sftp /usr/bin/sftp 
    \cp -arpf /usr/bin/bak/ssh /usr/bin/ssh 
    \cp -arpf /usr/bin/bak/ssh-add /usr/bin/ssh-add 
    \cp -arpf /usr/bin/bak/ssh-agent /usr/bin/ssh-agent 
    \cp -arpf /usr/bin/bak/ssh-keygen /usr/bin/ssh-keygen 
    \cp -arpf /usr/bin/bak/ssh-keyscan /usr/bin/ssh-keyscan 
    rm -rf /usr/bin/bak
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2.3、恢复sshd命令

    \mv /usr/sbin/sshd.bak /usr/sbin/sshd 
    \mv /etc/sysconfig/sshd.bak /etc/sysconfig/sshd 
    
    • 1
    • 2

    2.4、重启sshd服务

    systemctl daemon-reload
    systemctl restart sshd
    
    • 1
    • 2

    回滚后:

    [root@localhost ~]# ssh -V
    OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017
    
    • 1
    • 2

    总结:整理不易,如果对你有帮助,可否点赞关注一下?

    更多详细内容请参考:Linux运维实战总结

  • 相关阅读:
    Python实战:用多线程和多进程打造高效爬虫
    centos设置允许访问的ip
    docker入门加实战—docker数据卷
    持续集成(CICD)- Jenkins插件安装失败解决办法
    form表单基础
    UDS入门至精通系列Service 3D
    (二十七)张量表示定理 —— Cauchy 基本表示定理
    OpenCV-直方图反向投影
    faster python之ctypes调用so/dll
    嵌入式开发:提示和技巧——C 语言中要避免的8个保留字
  • 原文地址:https://blog.csdn.net/m0_37814112/article/details/132967853