本次基于以下操作系统进行升级OpenSSH:
#操作系统信息
[root@host1 ~]# cat /etc/os-release
NAME="Kylin Linux Advanced Server"
VERSION="V10 (Tercel)"
ID="kylin"
VERSION_ID="V10"
PRETTY_NAME="Kylin Linux Advanced Server V10 (Tercel)"
ANSI_COLOR="0;31"
#ARM架构信息
[root@host1 ~]# uname -a
Linux host1.novalocal 4.19.90-23.48.v2101.ky10.aarch64 #1 SMP Tue Jun 4 18:45:32 CST 2024 aarch64 aarch64 aarch64 GNU/Linux
#现有的openssh版本信息
[root@host1 ~]# sshd -V
OpenSSH_8.2p1, OpenSSL 1.1.1f 31 Mar 2020
1.下载openssh、openssl、zlib源码包
openssh下载链接:https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-10.0p1.tar.gz
openssl下载链接:https://www.openssl.org/source/openssl-3.3.1.tar.gz
zlib下载链接:https://www.zlib.net/zlib-1.3.1.tar.gz
2.在/root下执行 mkdir openssh 命令创建目录openssh,并将包上传到该路径,然后执行脚本安装即可
#在/root下执行 mkdir openssh 命令创建目录openssh
[root@host1 ~]# mkdir openssh
#cd切换目录,并将下载好的包上传到此目录
[root@host1 ~]# cd openssh
#最终文件信息内容如下
[root@host1 ~]# ls
install.sh openssh-10.0p1.tar.gz openssl-3.3.1.tar.gz zlib-1.3.1.tar.gz
#执行脚本进行安装,注意以root身份运行脚本
[root@host1 ~]# bash install.sh
脚本install.sh内容如下:
#!/bin/bash
#定义函数,主要检查用来检查上次命令是否执行成功,不成功则退出脚本
checkconfigure(){
if [ "$?" != "0" ]
then
echo -e "\e[31m 安装错误,请检查,程序退出! \e[0m"
exit 6
fi
}
echo -e "\033[32m程序开始执行!\033[0m"
#解压
tar -zxf openssh-10.0p1.tar.gz
tar -zxf openssl-3.3.1.tar.gz
tar -zxf zlib-1.3.1.tar.gz
#安装zlib
cd zlib-1.3.1/
#检查配置并设置安装路径
./configure --prefix=/usr/local/zlib
checkconfigure
#编译安装
make && make install
checkconfigure
#安装openssl
cd ../openssl-3.3.1/
#检查配置并设置安装路径
./Configure --prefix=/usr/local/openssl
checkconfigure
#表示使用4个核心来加速编译过程
make -j 4 && make install
checkconfigure
#x86架构用如下的lib,作为参考,该脚本同样适用于x86架构
#echo "/usr/local/openssl/lib64" >> /etc/ld.so.conf
#arm架构用如下的lib,即让系统能够找到并加载 OpenSSL 库
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
# 应用库配置
ldconfig
ldconfig -p | grep ssl
#添加到系统的 PATH 环境变量中,使其对所有用户生效
echo "export PATH=/usr/local/openssl/bin:$PATH" >> /etc/profile
#更新环境变量
source /etc/profile
checkconfigure
#安装openssh
#备份
mv /etc/ssh /etc/ssh_bak
mv /usr/bin/ssh /usr/bin/ssh_bak
mv /usr/bin/ssh-keygen /usr/bin/ssh-keygen_bak
mv /usr/sbin/sshd /usr/sbin/sshd_bak
cp -a /etc/pam.d/sshd /etc/pam.d/sshd_bak
cd ../openssh-10.0p1/
#检查配置并设置安装路径
./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-pam --with-ssl-dir=/usr/local/openssl --with-zlib=/usr/local/zlib
checkconfigure
#编译安装
make && make install
checkconfigure
#更新系统服务和配置文件
cp -a /usr/local/openssh/sbin/sshd /usr/sbin/sshd
cp -a /usr/local/openssh/bin/ssh /usr/bin/ssh
cp -a /usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen
#注意以下路径
cp -a /root/openssh/openssh-10.0p1/contrib/redhat/sshd.init /etc/init.d/sshd
chmod +x /etc/init.d/sshd
#配置文件允许root远程,允许密码认证,允许公钥认证,执行前,请确认sshd_config路径
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config
echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config
#SSH服务注册为系统服务,使得可以使用systemctl管理源码包
cat > /etc/systemd/system/sshd.service << 'EOF'
[Unit]
Description=OpenSSH Server
After=network.target
[Service]
ExecStart=/usr/local/openssh/sbin/sshd -f /etc/ssh/sshd_config
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
chmod +x /etc/systemd/system/sshd.service
#重新加载 systemd 配置
systemctl daemon-reload
# 设置开机自启
systemctl enable sshd
# 立即重启服务
systemctl restart sshd
echo -e "\033[32m更新后版本如下:\033[0m"
sshd -V
更新完成后,版本信息如下:
[root@host1 ~]# sshd -V
OpenSSH_10.0p2, OpenSSL 3.3.1 4 Jun 2024
注意事项:
以下组件不建议删除,因为源码包编译安装的方式依赖于旧的组件(尤其是openssh-server),保留旧的组件不会影响最终的漏洞修复结果。如果删除了,会导致ssh服务不可用。
[root@host1 ~]# rpm -qa | grep ssh
openssh-server-8.2p1-9.p19.ky10.aarch64
libssh2-1.9.0-8.ky10.aarch64
openssh-clients-8.2p1-9.p19.ky10.aarch64
libssh2-help-1.9.0-8.ky10.noarch
openssh-8.2p1-9.p19.ky10.aarch64
libssh-0.8.3-7.ky10.aarch64