超详细-内网离线升级openssh7.4p1至9.3p2案例

一、操作前准备

 1、确定版本

        查看Linux系统版本

        输入命令:hostnamectl

        查看openssh的版本

        输入命令:ssh -V

2、准备好离线安装包及依赖

openssh-9.3p2.tar.gz、openssl-1.1.1t.tar.gz、zlib-1.2.13.tar.gz、及依赖包:

Gcc依赖包:

Pam_依赖包:

Pam-devel依赖包:

Perl依赖包:

telnet-server依赖包:

Xinetd依赖包:

3、连接ssh服务器

        使用工具连接至ssh服务器,我这里使用的是xshell的工具,全程操作保证root权限下且必须保持一个SSH会话不掉线执行。因此最好是提前安装好telnet。

        3.1tmp目录创建data文件夹

        输入命令:cd /tmp

        输入命令:mkdir data

        上传所有安装包及依赖包到data文件,利用xshell中的xftp上传

        3.2关闭selinux

        查看selinux状态,输入命令:sestatus

        临时关闭selinux,输入命令:setenforce 0

        永久关闭selinux,输入命令:vi /etc/selinux/config  进入编辑模式

  1. 安装telnet
    1. 安装rpm包
  1. 切入到依赖包中telnet-server文件夹

输入命令:cd /tmp/data/yilai/telnet-server/

  1. 安装rpm包

输入命令:rpm -ivh telnet-server-0.17-66.el7.x86_64.rpm

  1. 切入到依赖包中xinetd文件夹

输入命令:cd /tmp/data/yilai/xinetd/

  1. 安装rpm包

输入命令:rpm -ivh xinetd-2.3.15-14.el7.x86_64.rpm

    1. 配置telnet(默认无telnet配置文件,首次需新增)

输入命令:vi /etc/xinetd.d/telnet

写入一下内容:

service telnet

{

    disable = yes

    flags       = REUSE

    socket_type = stream      

    wait        = no

    user        = root

    server      = /usr/sbin/in.telnetd

    log_on_failure  += USERID

}

添加完成后:wq保存退出

    1. 配置telnet登录的终端类型,在/etc/securetty文件末尾增加终端

输入命令:vi /etc/securetty

增加终端

pts/0

pts/1

pts/2

pts/3

    1. 启动telnet服务

输入命令:systemctl enable xinetd –now

输入命令:systemctl enable telnet.socket –now

    1. 查看telnet端口使用启用(telnet默认端口:23),若开启,一般没问题。

输入命令:ss -luntp | grep 23

    1. 开通防火墙

输入命令:firewall-cmd --zone=public --add-port=23/tcp –permanent

    1. 生效

输入命令:firewall-cmd –reload

    1. 查看端口清单

输入命令:firewall-cmd --zone=public --list-ports

    1. 若e)的这一步可以看到23端口处于启动状态,则可在windows下 cmd 执行 telnet ip 验证是否可以连接,可连接则代表无问题,否则查看上述的步骤是否有问题

输入命令:telnet ip 23(例:telnet 10.8.202.130 23)回车,输入账号密码成功登录

  1. 建立备份目录
    1. 存放原openssl备份文件的目录

                输入命令:mkdir -p /backup/openssl

  1. 存放原openssh有关的备份文件

        mkdir /backup/openssh

  1. 安装依赖
    1. 安装pam-devel

切换到依赖包所在目录,并进入pam-devel文件夹

输入命令:cd /tmp/data/yilai/pam-devel/

执行安装命令:rpm -ivh pam-devel-1.1.8-23.el7.x86_64.rpm

    1. 安装gcc

切换到依赖包所在目录,并进入gcc文件夹

输入命令:cd /tmp/data/yilai/gcc /

            执行安装命令:

                  rpm -ivh kernel-headers-3.10.0-1160.92.1.el7.x86_64.rpm

rpm -ivh mpfr-3.1.1-4.el7.x86_64.rpm

rpm -ivh libmpc-1.0.1-3.el7.x86_64.rpm

rpm -ivh glibc-* --replacefiles

rpm -ivh cpp-4.8.5-44.el7.x86_64.rpm

rpm -ivh gcc-4.8.5-44.el7.x86_64.rpm

从上到下依次执行

无报错为安装成功,有报错处理报错问题

    1. 安装perl

切换到依赖包所在目录,并进入perl文件夹

输入命令:cd /tmp/data/yilai/perl/

执行安装命令:rpm -ivh *

    1. 安装pam*

切换到依赖包所在目录,并进入pam_文件夹

输入命令:cd /tmp/data/yilai/pam_

执行安装命令:

      rpm -ivh boost-*

rpm -ivh boost-serialization-1.53.0-28.el7.x86_64.rpm

rpm -ivh snapper-*

rpm -ivh pcsc-lite-libs-1.8.8-8.el7.x86_64.rpm

rpm -ivh pam_krb5-2.4.8-6.el7.x86_64.rpm

rpm -ivh pam_pkcs11-0.6.2-30.el7.x86_64.rpm

rpm -ivh pam_snapper-0.2.8-4.el7.x86_64.rpm

rpm -ivh pam_ssh_agent_auth-0.10.3-2.22.el7_9.x86_64.rpm

rpm -ivh pam-devel-1.1.8-23.el7.x86_64.rpm

                  从上往下依次安装

无报错安装成功,否则处理报错。

  1. 安装SSL
    1. 备份openssl
  1. 备份openssl依赖库

输入命令:

     cp /usr/lib64/libcrypto.so.10 /backup/openssl

cp /usr/lib64/libcrypto.so.1.0.2k /backup/openssl

cp /usr/lib64/libssl.so.10 /backup/openssl

cp /usr/lib64/libssl.so.1.0.2k /backup/openssl

  1. 备份openssl可执行文件

输入命令:

mv /usr/bin/openssl /backup/openssl

  1. 备份openssl依赖文件,如果没有openssl,就跳过。

输入命令:

mv /usr/include/openssl /backup/openssl/include_openssl

  1. 备份配置文件

输入命令:

cp /etc/ld.so.conf /backup/openssl/etc_ld.so.conf

    1. 编译安装
  1. 删除原有的ssl目录

输入命令: rm -rf /etc/ssl

  1. 解压openssl安装包

切换至data目录

输入命令:

cd /tmp/data

tar -xf openssl-1.1.1t.tar.gz

                     切换到openssl-1.1.1t文件夹中

                     输入命令:

                            cd openssl-1.1.1t

                            ./config shared --prefix=/usr/local/ssl

若无报错则继续执行,否则处理报错问题

  1. 编译ssl文件

输入命令:make && make install

这里需要等一会。等待编译完成后:

输入命令:echo $?   (返回0代表编译安装成功)

    1. 建立软连接及修改配置文件

输入命令:

echo "/usr/local/ssl/lib">>/etc/ld.so.conf

ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl

ln -sf /usr/local/ssl/include/openssl /usr/include/openssl

echo "/usr/local/ssl/lib" >/etc/ld.so.conf.d/openssl.conf

ldconfig

从上到下依次执行

    1. 查看版本(若以上都无问题则此时可以看到升级后的openssl版本)

输入命令:openssl version

  1. 安装zlib
    1. 切换目录到data文件夹中

输入命令:

cd /tmp/data

tar -xf zlib-1.2.13.tar.gz

cd zlib-1.2.13/

./configure --prefix=/usr/local/zlib

make && make install (需要等带一段时间)

编译完成输入下面命令,返回0说明成功

echo $?

  1. 升级openssh
    1. 备份ssh配置文件目录

输入命令:mv /etc/ssh /backup/openssh

备份pam.d/sshd 文件

输入命令:mv /etc/pam.d/sshd /backup/openssh

    1. 卸载 openssh(提醒:一定要先telnet连上服务器)
  1. 查看是否存在历史版本

输入命令:rpm -qa | grep openssh

  1. 卸载历史版本

输入命令:rpm -e --nodeps `rpm -qa | grep openssh`

    1. 安装openssh
  1. 在data目录下解压openssh

输入命令:

      cd /tmp/data/

tar -xzvf openssh-9.3p2.tar.gz

  1. 进入解压目录执行编译安装

输入命令:cd openssh-9.3p2

  1. 初始化变量

输入命令:./configure --prefix=/usr/local/ssh --sysconfdir=/etc/ssh --with-openssl-includes=/usr/local/ssl/include --with-ssl-dir=/usr/local/ssl --with-zlib=/usr/local/zlib --with-md5-passwords --with-pam

  1. 编译安装文件

输入命令: make && make install

编译完成输入下面命令,返回0说明成功

echo $?

    1. 配置openssh
  1. 创建链接

输入命令:

ln -sf /usr/local/ssh/libexec /usr/libexec/openssh

ln -sf /usr/local/ssh/sbin/sshd /usr/sbin/sshd

ln -sf /usr/local/ssh/bin/scp /usr/bin/scp

ln -sf /usr/local/ssh/bin/ssh /usr/bin/ssh

ln -sf /usr/local/ssh/bin/ssh-add /usr/bin/ssh-add

ln -sf /usr/local/ssh/bin/ssh-agent /usr/bin/ssh-agent

ln -sf /usr/local/ssh/bin/ssh-keygen /usr/bin/ssh-keygen

ln -sf /usr/local/ssh/bin/ssh-keyscan /usr/bin/ssh-keyscan

在openssh的解压文件下执行:

输入命令:

cd /tmp/data/openssh-9.3p2

cp contrib/redhat/sshd.init /etc/init.d/sshd

cp contrib/redhat/sshd.pam /etc/pam.d/sshd.pam

cp contrib/ssh-copy-id /usr/bin/ssh-copy-id

  1. 赋权ssh-copy-id

输入命令:chmod 755 /usr/bin/ssh-copy-id

    1. 还原备份文件

输入命令:

cp /backup/openssh/ssh/sshd_config /etc/ssh/

y

cp /backup/openssh/ssh/ssh_config /etc/ssh/

y

cp /backup/openssh/sshd /etc/pam.d

  1. 追加到sshd_config

输入命令:

echo "KexAlgorithms [email protected],ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1" >> /etc/ssh/sshd_config

    1. 修改sshd_config

输入命令:vi /etc/ssh/sshd_config

# 取消PubkeyAuthentication yes 的注释

:PubkeyAuthentication yes

# 若UsePAM yes 默认被注释 则关闭注释

UsePAM yes

    1. 修改ssh_config

输入命令:vi /etc/ssh/ssh_config

# 将GSSAPIAuthentication yes注释掉

#GSSAPIAuthentication yes

# 保存并退出

    1. 还原依赖库

输入命令:

mv /backup/openssl/libcrypto.so.10 /usr/lib64/libcrypto.so.10

y

mv /backup/openssl/libssl.so.10 /usr/lib64/libssl.so.10

y

    1. 设置开机自启

输入命令:chkconfig sshd on

    1. 启动sshd(或者使用systemctl启动也可以)

输入命令:/etc/init.d/sshd start

  1. 服务启动成功后,查看当前版本

输入命令:ssh -V

    1. 验证连接
  1. 验证是否可以连接,可连接则代表无问题,否则查看上述的步骤是否有问题
  2. 使用ssh工具远程连接已经升级openssh的服务器,若可连接则代表此功能正常,
  3. 注意:需要使用普通用户验证连接,不能是root用户

    1. 关闭telnet
  1. 关闭telnet

输入命令:

systemctl disable xinetd --now

systemctl disable telnet.socket --now

  1. 关闭防火墙、移除23端口

输入命令:

firewall-cmd --zone=public --remove-port=23/tcp –permanent

  1. 生效

输入命令:firewall-cmd –reload

  1. 查看端口清单清单

输入命令:firewall-cmd --zone=public --list-ports