openssh 和 openssl 升级

一、 安装前准备

1.1 查看当前openssh版本

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

1.2 查看当前openssl版本

[root@centos7 ~]# 
[root@centos7 ~]# openssl version
OpenSSL 1.0.2k-fips 26 Jan 2017
[root@centos7 ~]#

1.3 安装依赖

yum install perl perl-Test-Harness perl-Test-Simple
yum groupinstall Development Tools

1.4 安装 zlib

1.4.1 下载

wget http://www.zlib.net/zlib-1.3.tar.gz

1.4.2 解压

tar -xzvf zlib-1.3.tar.gz

1.4.3编译&安装:

cd zlib-1.3
./configure --prefix=/usr/local/zlib
make
make test # 这一步出错不要继续 # 看到ok字样表示成功
make install

二、 安装OpenSSL(非必须)

2.1 源码编译安装

官网下载地址: https://www.openssl.org/source/

2.1.1 下载:

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

2.1.2 解压

tar -xzvf openssl-1.1.1w.tar.gz

2.1.3 编译&安装:

cd openssl-1.1.1w
./config --shared --prefix=/usr/local/openssl # --shared 创建共享库
make -j4 # - j4 使用四个进程
make install

2.2 替换openssl为新版本

2.2.1 替换 openssl 二进制文件

mv /usr/bin/openssl{,.back}
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl

2.2.2 openssl 相关库

mv /usr/include/openssl{,.back}
ln -s /usr/local/openssl/include/openssl/ /usr/include/

2.2.3 共享库路径加入系统

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

2.2.4 验证

ldconfig -v | grep openssl

三、 安装OpenSSH

3.1 备份相关文件

mv /etc/ssh{,.back}
mv /etc/pam.d/sshd{,.back}

3.2 下载

wget https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-9.5p1.tar.gz

3.3 解压

tar -xzvf openssh-9.5p1.tar.gz

3.4 编译&安装

cd openssh-9.5p1
./configure \
--prefix=/usr/local/openssh \
--sysconfdir=/etc/ssh \
--with-zlib=/usr/local/zlib \
--with-ssl-dir=/usr/local/openssl \
--with-pam
make -j4
make tests
make install

3.5 注意事项

确保使用了openssl-1.1.1

./config的结果

make tests 这里时间特别较长

保证.key文件的权限为 0600

注意: 安装完不可直接systemctl去重启sshd, 可能会造成服务器无法连接
请在有ssh之外远程到服务器上的权限再去升级ssh, 避免升级过程中导致ssh无法连接

3.6 修改sshd配置文件

其实直接恢复原来的sshd_conf文件即可. 保险起见使用如下配置
编辑sshd配置文件: vim /etc/ssh/sshd_config
添加: PermitRootLogin yes

3.7 复制sshd的pam配置文件

cp openssh-9.5p1/contrib/redhat/sshd.pam /etc/pam.d/sshd

3.8 使用systemctl管理sshd

配置启动脚本
cp openssh-9.5p1/contrib/redhat/sshd.init /etc/init.d/sshd

添加sshd的service配置文件
vim /usr/lib/systemd/system/sshd.service

#vim /usr/lib/systemd/system/sshd.service
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service

[Service]
Type=forking
ExecStart=/etc/rc.d/init.d/sshd start
ExecStop=/etc/rc.d/init.d/sshd stop
Restart=/etc/rc.d/init.d/sshd stop
[Install]
WantedBy=multi-user.target

3.9 替换为新的 sshd

mv /usr/bin/ssh{,.back}
mv /usr/sbin/sshd{,.back}
ln -s /usr/local/openssh/sbin/sshd /usr/sbin/sshd
ln -s /usr/local/openssh/bin/ssh /usr/bin/ssh

重载systemctl
systemctl daemon-reload
重启sshd
systemctl restart sshd

3.10 验证

四、 相关问题

4.1 error: *** working libcrypto not found

解决: yum install openssl-devel

4.2 error: PAM headers not found

解决: yum install pam-devel

4.3 升级 openssl3.0.12 Can’t locate IPC/Cmd.pm

解决: yum install perl-IPC-Cmd