# 银河麒麟v10 升级 SSH由8.2到9.9 二进制安装失败

根据您提供的 `yum check-update` 输出结果，情况如下：

**结论：** 您的系统官方源中目前**没有更新的 OpenSSH 版本**。

- **当前版本：** `8.2p1`
- **源中最新版本：** `8.2p1-16.p27.ky10`

虽然版本号相同，但这是一个针对麒麟系统的修订版。它可能包含部分安全补丁（Backport），但通常无法修复像 CVE-2020-15778 这种涉及代码逻辑变更的漏洞。

因此，为了彻底修复漏洞，您需要采用 **源码编译安装** 的方式将 OpenSSH 升级到最新的稳定版（建议 9.9p2 或更高）。

---

### 🚀 升级操作指南 (CentOS/Kylin V10)

由于涉及到底层核心组件升级，请务必严格按照以下步骤操作。

#### ⚠️ 第一阶段：准备工作与备份 (至关重要)

> **严重警告：**
> 
> 1. **不要关闭当前的 SSH 窗口！** 请新开一个窗口进行测试，确保新服务正常后再关闭旧窗口。
> 2. 建议开启 Telnet 服务或通过 VNC/IPMI 控制台操作，以防升级失败导致无法远程连接。

1. **安装编译依赖：**
    
    ```bash
    sudo yum install -y gcc make zlib-devel openssl-devel pam-devel systemd-devel wget tar
    
    ```
2. **备份现有文件：**
    
    ```bash
    # 备份配置文件
    sudo cp -r /etc/ssh /etc/ssh.bak.$(date +%F)
    # 备份二进制文件
    sudo cp /usr/bin/ssh /usr/bin/ssh.bak
    sudo cp /usr/sbin/sshd /usr/sbin/sshd.bak
    
    ```

#### 📥 第二阶段：下载与编译

3. **下载最新源码包：** 我们将下载最新的 OpenSSH 9.9p2（修复了您提到的漏洞及后续多个高危漏洞）。
    
    ```bash
    cd /tmp
    wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.9p2.tar.gz
    tar -zxf openssh-9.9p2.tar.gz
    cd openssh-9.9p2
    
    ```
4. **编译与安装：** 注意配置参数，确保兼容麒麟系统的 PAM 认证和 Systemd 管理。
    
    ```bash
    ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-ssl-dir=/usr/lib64 --with-zlib --with-pam --with-systemd
    
    make
    sudo make install
    
    ```

#### 🔧 第三阶段：配置与服务替换

5. **修正配置文件权限：** 新版本可能会生成新的配置示例，我们需要确保主配置文件允许 Root 登录（除非您有专门的普通用户）。
    
    ```bash
    # 检查配置文件中 PermitRootLogin 是否为 yes
    sudo sed -i 's/#PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config
    # 如果是密码登录，确保 PasswordAuthentication 为 yes
    sudo sed -i 's/#PasswordAuthentication.*/PasswordAuthentication yes/' /etc/ssh/sshd_config
    
    ```
6. **替换 Systemd 服务文件：** 这是最关键的一步，否则 `systemctl restart sshd` 可能会失败。
    
    ```bash
    # 复制官方提供的 systemd 文件
    sudo cp contrib/redhat/sshd.init /etc/init.d/sshd
    sudo chmod +x /etc/init.d/sshd
    
    # 如果存在旧的 systemd 服务文件，建议移除或覆盖（视具体系统情况而定）
    # 这里我们尝试直接重启服务
    
    ```
7. **重启 SSH 服务：**
    
    ```bash
    sudo systemctl daemon-reload
    sudo systemctl restart sshd
    
    ```

#### ✅ 第四阶段：验证

8. **检查版本：** 在**新开的终端窗口**执行：
    
    ```bash
    ssh -V
    
    ```
    
    如果显示 `OpenSSH_9.9p2`，则说明升级成功。
9. **清理：** 确认无误后，可以删除 `/tmp` 下的源码包。

---

### 💡 补充说明

如果您觉得编译安装风险太大，且该服务器不对外网开放，您可以暂时维持现状，但建议结合之前的**方案二（临时缓解）**，即重命名 `/usr/bin/scp`，以阻断最直接的漏洞利用途径。