在麒麟操作系统(Kylin Linux V10)上将 OpenSSH 升级到最新版本,是一项涉及系统底层安全的操作。由于麒麟系统分为 x86_64 和 ARM64(aarch64)两种架构,且升级过程中存在导致远程连接断开的风险,因此必须严格遵循规范流程。

以下是基于麒麟 V10 系统的完整升级实操指南:

🚨 升级前必读与准备(至关重要)

  1. 确认系统架构: 在终端输入 uname -m。如果返回 x86_64 则是普通PC/服务器架构;如果返回 aarch64 则是华为鲲鹏/飞腾等 ARM 架构。
  2. 开启 Telnet 备用通道(防失联): 升级 SSH 极大概率会导致当前连接中断或升级失败无法重连。务必先安装并开启 Telnet 服务作为保底通道。
    # 安装 telnet 服务
    sudo yum install telnet-server telnet xinetd -y
    # 启动并设置开机自启
    sudo systemctl enable --now telnet.socket
    # 检查 23 端口是否开启
    sudo netstat -tlnp | grep 23
    
    开启后,建议先新开一个终端用 Telnet 登录测试,确保能连上后再继续后续操作。
  3. 安装编译依赖
    sudo yum groupinstall -y "Development Tools"
    sudo yum install -y zlib-devel pam-devel openssl-devel perl-IPC-Cmd perl-Data-Dumper
    

📦 第一步:编译安装最新版 OpenSSL

OpenSSH 的最新版通常依赖较新的 OpenSSL 库,因此必须先升级 OpenSSL。以下以当前较新的 OpenSSL 3.5.6 为例:

  1. 下载并解压源码
    wget https://www.openssl.org/source/openssl-3.5.6.tar.gz
    tar -xzf openssl-3.5.6.tar.gz
    cd openssl-3.5.6
    
  2. 配置编译参数如果是 ARM64 (aarch64) 架构,必须指定 linux-aarch64,否则会崩溃。
    # x86_64 架构使用 ./config,aarch64 架构使用 ./Configure linux-aarch64
    ./config --prefix=/usr/local/openssl-3.5.6 --openssldir=/usr/local/openssl-3.5.6 shared
    
  3. 编译与安装
    make -j$(nproc)
    sudo make install
    
  4. 更新动态链接库
    echo "/usr/local/openssl-3.5.6/lib64" | sudo tee /etc/ld.so.conf.d/openssl-3.5.6.conf
    sudo ldconfig
    # 验证 OpenSSL 版本
    /usr/local/openssl-3.5.6/bin/openssl version
    

🔧 第二步:编译安装最新版 OpenSSH

以当前较新的 OpenSSH 10.0p2 为例(如需 10.3p1 等更新版本,替换版本号即可):

  1. 下载并解压源码
    wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-10.0p2.tar.gz
    tar -xzf openssh-10.0p2.tar.gz
    cd openssh-10.0p2
    
  2. 配置编译参数注意将 --with-ssl-dir 指向刚才编译好的 OpenSSL 路径。
    ./configure \
    --prefix=/usr \
    --sysconfdir=/etc/ssh \
    --with-pam \
    --with-zlib \
    --with-ssl-dir=/usr/local/openssl-3.5.6 \
    --with-md5-passwords \
    --with-privsep-path=/var/lib/sshd
    
  3. 编译与安装
    make -j$(nproc)
    # 修复主机密钥权限(必须为 600,否则服务无法启动)
    sudo chmod 600 /etc/ssh/ssh_host_*_key
    sudo make install
    

⚙️ 第三步:服务配置与启动

  1. 移除不兼容的旧配置: OpenSSH 10.0 及以上版本已移除对 GSSAPI 的支持,必须从配置文件中删除相关项,否则服务会启动失败。
    sudo sed -i '/^GSSAPIAuthentication/d' /etc/ssh/sshd_config
    sudo sed -i '/^GSSAPICleanupCredentials/d' /etc/ssh/sshd_config
    
  2. 允许 Root 登录(按需配置)
    echo 'PermitRootLogin yes' | sudo tee -a /etc/ssh/sshd_config
    echo 'UsePAM yes' | sudo tee -a /etc/ssh/sshd_config
    
  3. 重载并启动 SSHD 服务
    sudo systemctl daemon-reload
    sudo systemctl restart sshd
    sudo systemctl enable sshd
    
  4. 验证版本
    ssh -V
    # 预期输出类似:OpenSSH_10.0p2, OpenSSL 3.5.6 1 Jul 2025
    

🚨 常见问题与回滚方案

  • 服务启动失败(Unit not found 或 key generation failed): 通常是权限或密钥问题。尝试手动生成密钥并修复权限:
    sudo ssh-keygen -A
    sudo mkdir -p /var/empty/sshd
    sudo chmod 755 /var/empty/sshd
    sudo chown root:root /var/empty/sshd
    sudo systemctl restart sshd
    
  • 升级失败回滚: 如果 SSH 彻底挂了,通过 Telnet 登录,执行以下命令恢复系统自带的旧版 SSH:
    sudo yum reinstall -y openssh openssh-server openssh-clients
    sudo systemctl restart sshd
    

最后提醒:升级完成并测试 SSH 连接完全正常后,为了系统安全,请务必关闭 Telnet 服务sudo systemctl disable --now telnet.socket)。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐