[toc]

注意

更新过程中做好备份操作,最好提前开启telnet远程登录的功能,防止因为操作失误,无法远程登录的问题。

升级操作

前期准备

yum源准备

下载一个同操作系统版本的镜像包,传到系统上面挂载并配置本地yum源。
配置方法参考:内网环境配置yum源

安装依赖
yum install gcc gcc-c++ zlib-devel pam-devel openssl-devel make vim wget -y
备份之前的ssh
mv /etc/ssh{,.bak}

openssl升级

可以先直接尝试安装openssh,如果未提示错误,或者依赖版本问题,那么也可安装成功,如果出现依赖环境问题,可以参考本节进行升级。

openssh会依赖openssl,某些系统默认的openssl版本可能不满足openssh8.6,所以需要升级openssl。
查看openssl版本
openssl version
查看openssl命令的路径
which openssl

下载openssl软件包

官方地址:https://www.openssl.org/source/
wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1n.tar.gz --no-check-certificate

perl升级

openssl会依赖perl,升级openssl过程中经常会先升级perl。
官方地址:https://www.perl.org/get.html
下载perl
wget https://www.cpan.org/src/5.0/perl-5.32.1.tar.gz ----no-check-certificate
解压
tar xzvf perl-5.32.1.tar.gz
创建安装目录
mkdir /usr/local/perl
配置及安装

cd perl-5.32.1
./Configure -des -Dprefix=/usr/local/perl -Dusethreads –Uversiononly
# 编译安装
make && make install
# 备份老版本perl
mv /usr/bin/perl{,.bak}
# 将perl指向最新版
ln -s /usr/local/perl/bin/perl /usr/bin/perl

查看perl版本
image-1659663475811

openssl升级操作

解压openssl
tar xzvf openssl-1.1.1n.tar.gz
编译安装

cd openssl-1.1.1n
./config --prefix=/usr/local/openssl shared zlib

Operating system: x86_64-whatever-linux2
Configuring OpenSSL version 1.1.1n (0x101010efL) for linux-x86_64
Using os-specific seed configuration
Creating configdata.pm
Creating Makefile

**********************************************************************
***                                                                ***
***   OpenSSL has been successfully configured                     ***
***                                                                ***
***   If you encounter a problem while building, please open an    ***
***   issue on GitHub <https://github.com/openssl/openssl/issues>  ***
***   and include the output from the following command:           ***
***                                                                ***
***       perl configdata.pm --dump                                ***
***                                                                ***
***   (If you are new to OpenSSL, you might want to consult the    ***
***   'Troubleshooting' section in the INSTALL file first)         ***
***                                                                ***
**********************************************************************

# 编译安装
make && make install 

备份当前openssl
mv /usr/lib64/openssl{,.bak}
mv /usr/bin/openssl{,.bak}
使用新版openssl
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
更新动态链接库数据
echo "/usr/local/openssl/lib/" >> /etc/ld.so.conf
重新加载动态链接库
ldconfig -v
查看安装后版本

[root@test openssl-1.1.1n]# openssl version
OpenSSL 1.1.1n  15 Mar 2022

如果出现
image-1659665093588
是由于openssl库的位置不正确造成的
执行如下操作
ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

安装/升级openssh

外网下载openssh安装包,下载后拷贝到需要升级的服务器上
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.6p1.tar.gz

安装openssh

tar xzvf openssh-8.6p1.tar.gz
cd openssh-8.6p1
./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-pam --with-zlib --with-md5-passwords --with-tcp-wrappers

#如果编译安装了openssl 需要选择相应的路径
#./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-pam \
--with-ssl-dir=/usr/local/openssl \
--with-md5-passwords \
--mandir=/usr/share/man \
--with-zlib --without-hardening

#判断一下是否成功,如果返回零则继续
echo $?

#安装
make && make install

修改sshd配置
修改/etc/ssh/sshd_config文件:
PermitRootLogin yes
#UsePAM yes #如果开启此功能需要配置/etc/pam.d/sshd文件

配置启动脚本
cp ./contrib/redhat/sshd.init /etc/init.d/sshd
修改SSHD=/usr/local/openssh/sbin/sshd

替换执行命令,替换前可以对相关的几个文件进行单独备份
cp -arp /usr/local/openssh/bin/* /usr/bin/

重启服务并配置自启
/etc/init.d/sshd restart
chkconfig sshd on

查看openssh版本号

[root@test ~]# ssh -V
OpenSSH_8.6p1, OpenSSL 1.1.1n  15 Mar 2022

补充

#如果开启了UsePAM yes,/etc/pam.d/sshd文件内容如下:

#%PAM-1.0
auth       required pam_sepermit.so
auth       include      password-auth
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    optional     pam_keyinit.so force revoke
session    include      password-auth

星霜荏苒 居诸不息