!!!升级前必做三件事

* 开启 Telnet 备用通道(防止 SSH 断连后无法登录)

* 全量备份关键文件(方便失败时快速回滚)

* 通过 VNC 控制台操作(不要仅依赖 SSH 远程连接)

----------------------------------------------------------

第一步:开启 Telnet 备用通道

 

 

# 安装 Telnet 服务(如果离线源中有 telnet-server 包)
yum install -y telnet-server telnet xinetd

# 启动并设置开机自启
systemctl enable --now telnet.socket
systemctl enable --now xinetd

# 允许 root 通过 Telnet 登录
echo 'pts/0' >> /etc/securetty
echo 'pts/1' >> /etc/securetty

# 验证 Telnet 是否可用(在另一台机器上测试)
# telnet 10.0.0.1 23

 第二步:全量备份关键文件

# 创建备份目录
mkdir -p /root/backup_openssh

# 备份二进制文件
cp /usr/bin/ssh /root/backup_openssh/ssh.bak
cp /usr/sbin/sshd /root/backup_openssh/sshd.bak
cp /usr/bin/openssl /root/backup_openssh/openssl.bak

# 备份配置目录
cp -r /etc/ssh /root/backup_openssh/ssh_conf_backup
cp /etc/pam.d/sshd /root/backup_openssh/sshd_pam.bak

# 记录当前版本
ssh -V > /root/backup_openssh/version_before.txt
openssl version >> /root/backup_openssh/version_before.txt

第三步:安装编译依赖

# 安装编译工具链和依赖库
yum groupinstall -y "Development Tools"
yum install -y gcc make zlib-devel pam-devel perl-IPC-Cmd perl-Data-Dumper wget

第四步:编译安装 OpenSSL(aarch64 专用配置)

OpenSSH 10.4 依赖较新版本的 OpenSSL,需先升级 OpenSSL

# 下载 OpenSSL 源码
cd /usr/local/src
wget https://www.openssl.org/source/openssl-3.4.2.tar.gz
tar -xzf openssl-3.4.2.tar.gz
cd openssl-3.4.2

# 配置(aarch64 架构必须使用 linux-aarch64)
./Configure linux-aarch64 \
  --prefix=/usr/local/openssl-3.4.2 \
  --openssldir=/usr/local/openssl-3.4.2 \
  shared

# 编译并安装
make -j$(nproc)
make install

# 添加动态库配置
echo "/usr/local/openssl-3.4.2/lib64" | tee /etc/ld.so.conf.d/openssl-3.4.2.conf
ldconfig

# 创建软链接(替换系统默认 openssl)
mv /usr/bin/openssl /usr/bin/openssl.old
ln -s /usr/local/openssl-3.4.2/bin/openssl /usr/bin/openssl
ln -sf /usr/local/openssl-3.4.2/lib/libssl.so.3 /usr/lib64/libssl.so.3
ln -sf /usr/local/openssl-3.4.2/lib/libcrypto.so.3 /usr/lib64/libcrypto.so.3
# 验证
openssl version

第五步:编译安装 OpenSSH 10.4p1

# 下载 OpenSSH 源码
cd /usr/local/src
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-10.4p1.tar.gz
tar -xzf openssh-10.4p1.tar.gz
cd openssh-10.4p1

# 配置(指定 OpenSSL 路径,aarch64 无需额外架构参数)
./configure \
  --prefix=/usr \
  --sysconfdir=/etc/ssh \
  --with-pam \
  --with-zlib \
  --with-ssl-dir=/usr/local/openssl-3.4.2 \
  --with-md5-passwords \
  --with-privsep-path=/var/lib/sshd

# 编译并安装
make -j$(nproc)
make install

# 修复主机密钥权限(必须为 600,否则 sshd 无法启动)
chmod 600 /etc/ssh/ssh_host_*_key

第六步:配置调整(OpenSSH 10.x 重要变更)

OpenSSH 10.0 及以上版本已移除 GSSAPI 支持,需从配置文件中删除相关行,否则 sshd 无法启动

# 删除 GSSAPI 相关配置
sed -i '/^GSSAPIAuthentication/d' /etc/ssh/sshd_config
sed -i '/^GSSAPICleanupCredentials/d' /etc/ssh/sshd_config

# 检查并恢复原有安全策略(如 PermitRootLogin、PasswordAuthentication)
# 可根据需要手动编辑 /etc/ssh/sshd_config

第七步:重启服务并验证

# 重载 systemd 配置
systemctl daemon-reload

# 重启 SSH 服务
systemctl restart sshd

# 检查服务状态
systemctl status sshd

# 验证版本
ssh -V
openssl version

第八步:升级成功后清理

# 禁用 Telnet 服务
systemctl disable --now telnet.socket
systemctl disable --now xinetd

# 删除 /etc/securetty 中添加的 pts 行(可选)

回滚方案(升级失败时使用)

# 恢复二进制文件
cp /root/backup_openssh/ssh.bak /usr/bin/ssh
cp /root/backup_openssh/sshd.bak /usr/sbin/sshd
cp /root/backup_openssh/openssl.bak /usr/bin/openssl

# 恢复配置目录
cp -r /root/backup_openssh/ssh_conf_backup/* /etc/ssh/
cp /root/backup_openssh/sshd_pam.bak /etc/pam.d/sshd

# 恢复 OpenSSL 软链接
rm -f /usr/bin/openssl
cp /root/backup_openssh/openssl.bak /usr/bin/openssl

# 刷新动态库
ldconfig

# 重启服务
systemctl daemon-reload
systemctl restart sshd
systemctl status sshd

image

 这样就升级成功啦

注意事项:

1.如果离线安装telnet   可通过https://update.cs2c.com.cn/NS/V10/V10SP3-2403/os/adv/lic/base/aarch64/Packages/ 或者 https://update.cs2c.com.cn/NS/V10/V10SP3-2403/os/adv/lic/updates/aarch64/Packages/  找到telnet-0.17-77.ky10.aarch64.rpm、xinetd-2.3.15-31.ky10.aarch64.rpm(或更高版本)

2.升级了新版本后,配置文件里可能还残留着旧版本甚至已经被彻底移除的废弃选项(因为验证版本后会有报错),需要检查一下

第145行:RSAAuthentication 已废弃(OpenSSH 7.0+ 废弃)
第147行:RhostsRSAAuthentication 已废弃(仅适用于 SSH 协议第1代)
第168行:GSSAPIKexAlgorithms 是错误配置(OpenSSH 10.x 已彻底移除 GSSAPI 支持)

vim /etc/ssh/sshd_config   注销掉上面三行

3.grep -n "GSSAPIKexAlgorithms" /etc/crypto-policies/back-ends/openssh.config

如果有输出,也注销掉

vim /etc/crypto-policies/back-ends/openssh.config

4.为了避免系统加密策略再次覆盖你的 sshd 配置,建议在 /etc/sysconfig/sshd 中取消加密策略的自动应用

vim /etc/sysconfig/sshd

找到 CRYPTO_POLICY= 这一行,取消注释(去掉行首的 #

验证并重启

# 先验证配置是否正确(无输出即正确)
/usr/sbin/sshd -t

# 重启 sshd
systemctl restart sshd

# 检查状态
systemctl status sshd