暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

CentOS7升级openssh操作步骤

kpxiaoxm 2021-08-06
3458

一、升级前操作

1、实验环境

系统版本:CentOS Linux release 7.4.1708 (Core) 
原openssl、openssh版本:OpenSSH_7.4p1, OpenSSL 1.0.2k-fips
第一次升级版本:openssh-8.1p1、openssl-1.0.2t
每二次升级版本:openssh-8.3p1、openssl-1.1.1g

2、升级安装包准备

下载最新 zlib、openssl、openssh 的源码包,存放至:/usr/local/src/
https://zlib.net/
https://www.openssl.org/
https://www.openssh.com/

3、配置本地安装源(可选)

    cd etc/yum.repos.d/
    mkdir bak
    mv CentOS-* bak/
    mkdir mnt/cdrom
    mount opt/CentOS-7-x86_64-DVD-*.iso mnt/cdrom/
    mount dev/sr0 mnt/cdrom
    echo '[local]' >> etc/yum.repos.d/local.repo
    echo 'name=local' >> etc/yum.repos.d/local.repo
    echo 'baseurl=file:///mnt/cdrom' >> etc/yum.repos.d/local.repo
    echo 'gpgcheck=0' >> etc/yum.repos.d/local.repo
    echo 'enable=1' >> etc/yum.repos.d/local.repo
    yum makecache fast

    4、安装依赖包

      yum groupinstall -y "Development Tools"
      yum install -y xinetd telnet-server pam pam-devel
       

      5、使用telnet登录

      创建普通用户(原本有普通用户的可以不用创建)
        useradd -m localuser ; echo 'password' | passwd --stdin localuser
        启动telnet服务
          systemctl enable xinetd.service
          systemctl enable telnet.socket
          systemctl start telnet.socket
          systemctl start xinetd
           如果启用了防火墙,请放通23端口
            netstat -lntp | grep -w 23
            iptables-save > iptables.bak`date +%Y%m%d`
            iptables -I INPUT -p tcp --dport 23 -j ACCEPT
            iptables -nL | grep 23
            //或者
            firewall-cmd --zone=public --add-port=23/tcp --permanent
            firewall-cmd --reload
             
            新开窗口,以telnet登录
            保留原窗口


            二、原版本为PRM的操作步骤

            1、查看升级前的情况

              cat etc/*-release >> before_update.out
              ssh -V >> before_update.out
              openssl version -a >> before_update.out
              rpm -qa | grep openssh >> before_update.out
              rpm -qa | grep openssl >> before_update.out
              rpm -qa | grep zlib >> before_update.out
               
              2、设置环境变量
                zlib_version=1.2.11
                ssl_version=1.0.2t
                ssh_version=8.1p1
                umask 022
                 
                3、安装zlib
                  cd usr/local/src/ &&  \
                  tar zxf zlib-$zlib_version.tar.gz && \
                  cd zlib-$zlib_version/ && \
                  ./configure --prefix=/usr/local/zlib && \
                  make -j4 && make install && \
                  chmod -R 755 usr/local/zlib
                   
                  4、安装openssl
                    cd usr/local/src/ &&  \
                    tar zxf openssl-$ssl_version.tar.gz && \
                    cd openssl-$ssl_version/ && \
                    ./config shared && \
                    make -j4 && make test && make install && \
                    echo "/usr/local/ssl/lib" >> etc/ld.so.conf && \
                    ldconfig && \
                    mv usr/bin/openssl usr/bin/openssl.bak`date +%Y%m%d` && \
                    ln -s usr/local/ssl/bin/openssl usr/bin/openssl && \
                    ln -s usr/local/ssl/include/openssl usr/include/openssl && \
                    chmod -R 755 /usr/local/ssl && \
                    openssl version -a //新版本信息
                    默认安装位置是:/usr/local/ssl
                    配置文件:/usr/local/ssl/openssl.cnf

                    5、备份openssh

                    // 列出需要备份的文件或目录
                    for i in $(rpm -qa | grep openssh);do rpm -ql $i | grep -v share ;done
                    // 备份命令
                    for i in $(rpm -qa | grep openssh);do rpm -ql $i | grep -v share | xargs -I {} cp -r {} {}.`date +%Y%m%d` ;done
                    备注:xargs的一个选项-I(大写i),使用-I指定一个替换字符串{}(可以是其它符号),这个字符串在xargs扩展时会被替换掉,当-I与xargs结合使用,每一个参数命令都会被执行一次

                    6、关闭sshd服务并卸载openssh

                    //关闭sshd服务命令
                    systemctl stop sshd
                    //卸载命令
                    for i in $(rpm -qa | grep openssh);do rpm -e $i --nodeps ;done


                    7、安装openssh

                      cd /usr/local/src/ && \
                      tar zxf openssh-$ssh_version.tar.gz && \
                      cd openssh-$ssh_version/ && \
                      ./configure --prefix=/usr/local/openssh-$ssh_version --sysconfdir=/etc/ssh --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/ssl --with-pam --with-tcp-wrappers --with-md5-passwords && \
                      chmod 0600 /etc/ssh/ssh_host_rsa_key && \
                      chmod 0600 /etc/ssh/ssh_host_ecdsa_key && \
                      chmod 0600 /etc/ssh/ssh_host_ed25519_key && \
                      make -j4 && make install && \
                      chmod -R 755 /usr/local/openssh-$ssh_version && \
                      /usr/local/openssh-$ssh_version/bin/ssh -V //新版本信息
                       
                      8、修改默认路径
                        echo $PATH && \
                        echo "export PATH=/usr/local/openssh-$ssh_version/sbin:/usr/local/openssh-$ssh_version/bin:\$PATH" >> /etc/profile && \
                        source /etc/profile && \
                        echo $PATH
                         
                        9、复制可执行文件
                          //复制新执行文件到系统路径
                          cp -a /usr/local/openssh-$ssh_version/bin/* /usr/bin/
                          cp -a /usr/local/openssh-$ssh_version/sbin/sshd /usr/sbin/sshd
                          //复制启动文件
                          echo y | cp /usr/local/src/openssh-$ssh_version/contrib/redhat/sshd.init /etc/init.d/sshd
                           

                          10、启动sshd服务

                            systemctl daemon-reload
                            systemctl start sshd
                            chkconfig sshd on
                             

                            三、原版本为源码的操作步骤

                            1、设置环境变量

                              zlib_version=1.2.11
                              ssl_version=1.1.1g
                              ssh_version=8.3p1
                              ssh_old_version=8.1p1
                              umask 022
                               
                              2、安装zlib(可选)
                                cd /usr/local/src/ &&  \
                                tar zxf zlib-$zlib_version.tar.gz && \
                                cd zlib-$zlib_version/ && \
                                ./configure --prefix=/usr/local/zlib && \
                                make -j4 && make install && \
                                chmod -R 755 /usr/local/zlib
                                 
                                3、安装openssl(覆盖安装)
                                  cp -a /usr/local/ssl  /usr/local/ssl.`date +%Y%m%d`
                                  cd /usr/local/src/ && \
                                  tar zxf openssl-$ssl_version.tar.gz && \
                                  cd openssl-$ssl_version/ && \
                                  ./config shared && \
                                  make -j4 && make test && make install && \
                                  chmod -R 755 /usr/local/ssl && \
                                  echo "/usr/local/lib64" >> /etc/ld.so.conf && \
                                  ldconfig && \
                                  openssl version -a //新版本信息
                                   
                                  4、关闭openssh服务
                                    systemctl stop sshd
                                     
                                    5、安装openssh
                                      cd /usr/local/src/ && \
                                      tar zxf openssh-$ssh_version.tar.gz && \
                                      cd openssh-$ssh_version/ && \
                                      ./configure --prefix=/usr/local/openssh-$ssh_version --sysconfdir=/etc/ssh --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/ssl --with-pam --with-tcp-wrappers --with-md5-passwords && \
                                      chmod 0600 /etc/ssh/ssh_host_rsa_key && \
                                      chmod 0600 /etc/ssh/ssh_host_ecdsa_key && \
                                      chmod 0600 /etc/ssh/ssh_host_ed25519_key && \
                                      make -j4 && make install && \
                                      chmod -R 755 /usr/local/openssh-$ssh_version && \
                                      /usr/local/openssh-$ssh_version/bin/ssh -V
                                       
                                      6、删除PATH中关于openssh旧版本的部份
                                        export PATH=`echo $PATH | sed "s#/usr/local/openssh-$ssh_old_version/sbin:/usr/local/openssh-$ssh_old_version/bin:##g"`
                                        echo $PATH
                                         

                                        7、将/etc/profile里openssh旧版本的行注释掉

                                          sed -i "/openssh-$ssh_old_version/s/^/#/g" /etc/profile
                                          grep openssh-$ssh_old_version /etc/profile
                                           
                                          8、修改默认路径
                                            echo $PATH && \
                                            echo "export PATH=/usr/local/openssh-$ssh_version/sbin:/usr/local/openssh-$ssh_version/bin:\$PATH" >> /etc/profile && \
                                            source /etc/profile && \
                                            echo $PATH
                                             
                                            9、复制可执行文件
                                              //备份旧执行文件:
                                              for i in $(cd /usr/local/openssh-$ssh_version/bin/;ls );do
                                              mv /usr/bin/$i /usr/bin/$i.bak`date +%Y%m%d`
                                              done
                                              mv /usr/sbin/sshd /usr/sbin/sshd.bak`date +%Y%m%d`
                                              //复制新执行文件到系统路径
                                              cp -a /usr/local/openssh-$ssh_version/bin/* /usr/bin/
                                              cp -a /usr/local/openssh-$ssh_version/sbin/sshd /usr/sbin/sshd
                                              //复制启动文件
                                              echo y | cp /usr/local/src/openssh-$ssh_version/contrib/redhat/sshd.init /etc/init.d/sshd
                                               
                                              10、启动sshd服务
                                                systemctl daemon-reload
                                                systemctl restart sshd
                                                chkconfig sshd on
                                                 
                                                四、升级后操作

                                                1、版本信息验证

                                                使用root和普通用户 ssh -V验证
                                                  ssh -V
                                                  ssh localuser@localhost ssh -V
                                                  远程执行命令验证 ssh IP ssh -V

                                                  2、关闭telnet服务

                                                  验证通过后,关闭telnet服务
                                                    systemctl disable xinetd.service
                                                    systemctl disable telnet.socket
                                                    systemctl stop telnet.socket
                                                    systemctl stop xinetd
                                                    netstat -lntp | grep -w 23
                                                     

                                                    3、其它配置

                                                      ## 配置不允许root登录
                                                      sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin no/g' /etc/ssh/sshd_config
                                                      ## 配置允许root登录
                                                      sed -i 's/#PermitRootLogin no/PermitRootLogin yes/g' /etc/ssh/sshd_config
                                                       
                                                      五、报错及解决方法

                                                      报错1

                                                        checking for openssl/opensslv.h... yes
                                                        checking OpenSSL header version... 1000214f (OpenSSL 1.0.2t 10 Sep 2019)
                                                        checking for OpenSSL_version... no
                                                        checking for OpenSSL_version_num... no
                                                        checking OpenSSL library version... 100020bf (OpenSSL 1.0.2k 26 Jan 2017)
                                                        checking whether OpenSSL''s headers match the library... no
                                                        configure: error: Your OpenSSL headers do not match your
                                                        library. Check config.log for details.
                                                        If you are sure your installation is consistent, you can disable the check
                                                        by running "./configure --without-openssl-header-check".
                                                        Also see contrib/findssl.sh for help identifying header/library mismatches.
                                                        或者:
                                                        checking OpenSSL header version... not found
                                                        configure: error: OpenSSL version header not found.
                                                         解决方法:
                                                          echo "/usr/local/ssl/lib" >> /etc/ld.so.conf &&  \
                                                          ldconfig && \
                                                          mv /usr/bin/openssl /usr/bin/openssl.bak`date +%Y%m%d` && \
                                                          mv /usr/include/openssl /usr/include/openssl.bak`date +%Y%m%d` && \
                                                          ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl && \
                                                          ln -s /usr/local/ssl/include/openssl /usr/include/openssl
                                                           
                                                          报错2
                                                            configure: error: PAM headers not found
                                                            解决方法:
                                                              yum install -y pam-devel
                                                               

                                                              报错3

                                                                PAM is enabled. You may need to install a PAM control file for sshd, otherwise password authentication may fail. 
                                                                Example PAM control files can be found in the contrib/ subdirectory
                                                                解决方法:
                                                                检查是否存在/etc/pam.d/sshd


                                                                报错4

                                                                  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
                                                                  @ WARNING: UNPROTECTED PRIVATE KEY FILE! @
                                                                  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
                                                                  Permissions 0640 for '/etc/ssh/ssh_host_rsa_key' are too open.
                                                                  It is required that your private key files are NOT accessible by others.
                                                                  This private key will be ignored.
                                                                  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
                                                                  @ WARNING: UNPROTECTED PRIVATE KEY FILE! @
                                                                  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
                                                                  Permissions 0640 for '/etc/ssh/ssh_host_ecdsa_key' are too open.
                                                                  It is required that your private key files are NOT accessible by others.
                                                                  This private key will be ignored.
                                                                  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
                                                                  @ WARNING: UNPROTECTED PRIVATE KEY FILE! @
                                                                  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
                                                                  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/ssh_host_rsa_key
                                                                    chmod 600 /etc/ssh/ssh_host_ecdsa_key
                                                                    chmod 600 /etc/ssh/ssh_host_ed25519_key
                                                                    然后,重新 make install


                                                                     
                                                                    报错5
                                                                    执行 ssh -V 验证版本时报错:
                                                                      $ ssh -V
                                                                      ssh: error while loading shared libraries: libcrypto.so.1.0.0: cannot open shared object file: No such file or directory
                                                                      解决方法:
                                                                      如果因为系统根据合规性要求配置了 umask 027 ,那么由于 /usr/local/ssl 的目录权限是 750 ,所有普通用户无法进入;
                                                                      修改 /usr/local/ssl 的目录权限为 755 即可
                                                                      升级步骤应加上:
                                                                        chmod -R 755 /usr/local/zlib
                                                                        chmod -R 755 /usr/local/ssl
                                                                        chmod -R 755 /usr/local/openssh-8.1p1

                                                                        报错6

                                                                          openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory

                                                                          是在openssl覆盖升级完成后,执行 openssl version -a 报的错;

                                                                          之前 shared 生成动态连接库存放的位置是 /usr/local/ssl/lib 
                                                                          openssl-1.1.1g 版本动态连接库的位置是 /usr/local/lib64
                                                                          增加执行命令:echo "/usr/local/lib64" >> /etc/ld.so.conf  && ldconfig  即可

                                                                          -- End --
                                                                          文章转载自kpxiaoxm,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                                                          评论