OpenSSL和OpenSSH的编译安装

文章主要内容是逐步说明基于Ubuntu系统的OpenSSL和OpenSSH的下载和编译安装。
以下部分内容参考自Ubuntu 20 手动编译安装 OpenSSH 9.6p1(最新版)以及文心一言,在这里收纳整理方便后续参考。


前言

近日出现了OpenSSH 远程代码执行漏洞(CVE-2024-6387)

影响版本
OpenSSH < 4.4p1(未更新历史漏洞 CVE-2006-5051、CVE-2008-4109 的补丁)
8.5p1 <= OpenSSH < 9.8p1
CentOS 9(暂未发布补丁)
Ubuntu 22.04、24.04
Debian 12
TencentOS Server 4
安全版本
4.4p1 <= OpenSSH < 8.5p1
OpenSSH >= 9.8p1
CentOS 6、7、8

而Ubuntu使用 sudo apt-get install openssh-server 获取到的版本实在老旧。

$ sudo apt install openssh-server
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成
openssh-server 已经是最新版 (1:8.9p1-3ubuntu0.10)。

无奈之下,只能采取编译安装的方式来进行更新。

正文

请确保: 您有除了SSH以外的其它访问服务器的方式,如下述参考文章所提到的 telnet,否则可能会导致无法访问服务器。
请注意: 为方便后续更新版本时参考,本文只阐述部分关键步骤,第一次编译安装所需要的,详细的库文件链接等步骤,请查看本文提到的参考文章,如Ubuntu 20 手动编译安装 OpenSSH 9.6p1(最新版),或者自行百度

更新的内容

首先我们要明确更新SSH需要哪些组件,根据参考资料,我们需要按顺序安装zlib、OpenSSL、OpenSSH。这三个我们都可以通过官网进行下载。

下载

下载源码的位置我们可以设定为 /usr/local/src,别的地方也是没问题的。
小提示: 如果在服务器上下载的太慢,可以先下载到本地再上传到服务器上

zlib

zlib官网里面向下翻,可以找到最近更新的zlib版本,我们这里下载的是zlib-1.3.1.tar.gz

sudo wget https://zlib.net/zlib-1.3.1.tar.gz

OpenSSL

OpenSSL官网里面向下翻,可以找到最近更新的OpenSSL版本,我们这里下载的是openssl-3.3.1.tar.gz

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

OpenSSH

OpenSSH官网点击左侧Release Note,可以找到最近更新的OpenSSH版本,往下翻到Checksums,可以找到下载链接,注意别下错了,我们这里下载的是openssh-9.8p1.tar.gz

sudo wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz

解压安装

第一件事,进入你的下载文件夹,如 /usr/local/src

cd /usr/local/src

zlib

在安装包所在的文件夹下解压

sudo tar zxvf zlib-1.3.1.tar.gz

进入目录

cd ./zlib-1.3.1

配置,默认安装路径为 /usr/local/lib

sudo ./configure

编译

sudo make -j

安装

sudo make install -j

OpenSSL

在安装包所在的文件夹下解压

sudo tar zxvf openssl-3.3.1.tar.gz

进入目录

cd ./openssl-3.3.1

配置,安装路径为 /usr/local/openssl,以及绑定 zlib 所在的路径

sudo ./configure --prefix=/usr/local/openssl --openssldir=/usr/local/openssl --with-zlib-include=/usr/local/include --with-zlib-lib=/usr/local/lib

编译,时间相对会有一点长,大约是两分钟左右

sudo make -j

安装

sudo make install -j

此处或许需要软链接,目标文件夹为 /usr/bin/ 。示例为 openssl 的软链接,并删除(如果有的话)被链接的路径上的同名文件

sudo ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl

OpenSSH

安装之前,请先备份ssh的配置文件,如

sudo cp -r /etc/ssh /etc/ssh_old

在安装包所在的文件夹下解压

sudo tar zxvf openssh-9.8p1.tar.gz 

进入目录

cd ./openssh-9.8p1

配置,安装路径为 /usr/local/openssh,指定配置文件夹路径为 /etc/ssh 以及绑定 zlibopenssl 所在的路径,并启用 PAM 支持。

sudo ./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh  --with-ssl-dir=/usr/local/openssl --with-zlib-dir=/usr/local/zlib --with-pam

编译,时间会比OpenSSL短一些,大约是一分钟左右

sudo make -j

安装

sudo make install -j

此处或许需要软链接,目标文件夹为 /usr/bin/ 。示例为 openssh 的软链接,并删除(如果有的话)被链接的路径上的同名文件

sudo ln -s /usr/local/openssh/bin/ssh /usr/bin/ssh

恢复配置文件

sudo cp -r /etc/ssh_old/* /etc/ssh

检查版本

openssl -version
ssh -V

如果是如下结果那就是安装成功了,只剩下最后一步了

$ openssl -version
OpenSSL 3.3.1 4 Jun 2024 (Library: OpenSSL 3.3.1 4 Jun 2024)
$ ssh -V
OpenSSH_9.8p1, OpenSSL 3.3.1 4 Jun 2024

配置开机启动

修改systemctl配置文件

sudo vim /usr/lib/systemd/system/sshd.service
[Unit]
Description=OpenSSH server daemon (custom build)  

[Service]
ExecStart=/usr/local/openssh/sbin/sshd -D  
Restart=always  
KillMode=process  
EnvironmentFile=-/etc/default/ssh  
EnvironmentFile=-/etc/ssh/sshd_config  

[Install]
WantedBy=multi-user.target

应用设置并开机启动

sudo systemctl daemon-reload
sudo systemctl start sshd.service
sudo systemctl enable sshd

检查运行状态

sudo systemctl status sshd.service

最后

假如你成功把每一步都执行下来,那么恭喜你,你已经成功更新了SSH啦!希望你不要遇到任何问题,如果有问题那就百度吧!

最后修改日期: 2024年7月19日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。

12 − 11 =