银河麒麟V10离线升级OpenSSH到10.0p1-源码包方式

一、本次基于以下操作系统进行升级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

二、下载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

三、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

脚本内容如下

#!/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 "Port 2222" >> /etc/ssh/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
  • 注意:脚本中相应命令随系统架构而定,ssh启动端口如需指定在脚本中进行修改

注意事项

以下组件不建议删除,因为源码包编译安装的方式依赖于旧的组件(尤其是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
end