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
以及绑定 zlib
和 openssl
所在的路径,并启用 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啦!希望你不要遇到任何问题,如果有问题那就百度吧!
留言