启动与系统组件

将内置 OpenSSH 升级到最新的 OpenSSH 版本 - Windows Server

· 52CE 我爱测

若要使用安全外壳(SSH)提供安全远程管理,Windows 将 OpenSSH 作为按需功能提供。 但是,作为 Windows 和 Windows Server 安装媒体的一部分随附的内置版本(如 7.7p1 或 8.1p1)通常落后于 GitHub 上提供的最新 Win32-OpenSSH 版本。 若要使用较新的加密算法、增强的日志记录和重要的安全更新,请将 OpenSSH 升级到 GitHub 版本。 本文介绍内置版本与 GitHub 版本之间的差异、

若要使用安全外壳(SSH)提供安全远程管理,Windows 将 OpenSSH 作为按需功能提供。 但是,作为 Windows 和 Windows Server 安装媒体的一部分随附的内置版本(如 7.7p1 或 8.1p1)通常落后于 GitHub 上提供的最新 Win32-OpenSSH 版本。 若要使用较新的加密算法、增强的日志记录和重要的安全更新,请将 OpenSSH 升级到 GitHub 版本。

本文介绍内置版本与 GitHub 版本之间的差异、如何备份现有配置,以及如何在保持服务设置不变的同时安全地升级。 它还包括有关使用 Windows 更新手动更新 OpenSSH 的说明。

先决条件

  • 使用本地管理员凭据登录到计算机。

  • 确保 OpenSSH 服务器服务未处理活动会话。

    注释

    升级会暂时停止 OpenSSH 服务器服务,并断开任何活动 SSH 会话的连接。

  • 如果服务重启,可以使用备用访问方法(如 RDP 或控制台)。

  • 请确保你具有修改 C:\ProgramData\ssh 并安装 MSI 包的正确权限。

  • 在生产环境中安装新版本之前,请先在过渡环境中对其进行测试。

了解系统内置与 GitHub 的 OpenSSH

默认情况下,使用 Windows 更新来安装和维护内置 OpenSSH 功能。 通常,软件驻留在 C:\Windows\System32\OpenSSH 中。 内置版本为 Microsoft 支持且稳定,但仅在 Windows 本身更新时更新。

GitHub 版本(称为 Win32-OpenSSH)安装在 C:\Program Files\OpenSSH 中,并具有最新的功能和修补程序。 但是,必须手动更新它。

步骤 1:备份配置和密钥

在升级之前,请备份所有配置和密钥文件。

下表列出了文件及其默认文件夹位置

文件夹和文件 Description
C:\ProgramData\ssh\sshd_config 服务器配置文件
C:\ProgramData\ssh\administrators_authorized_keys 管理员帐户的密钥
C:\ProgramData\ssh\ssh_host_*_key 主机标识密钥
C:\Users<UserName>.ssh\authorized_keys 针对每个用户的密钥

若要复制这些文件,请打开 Windows PowerShell 命令行界面,并运行一个类似于以下的 cmdlet:

Copy-Item "C:\ProgramData\ssh" -Destination "C:\Backup\ssh_backup" -Recurse

重要

  • 为了避免客户端信任警告,请不要更改主机或用户密钥。

  • 不要更改源文件和文件夹或目标文件和文件夹的文件权限。 私钥必须只能由 SYSTEM 和管理员读取。 若要验证权限,请在 PowerShell 命令提示符下运行以下类似的 cmdlet:

    Get-Acl "C:\ProgramData\ssh\ssh_host_ed25519_key" | Format-List
    

步骤 2:升级 OpenSSH

若要升级 OpenSSH,请选择以下方法之一:

  • 选项 1:使用 MSI 安装程序将 OpenSSH 升级到最新的 GitHub 版本
  • 选项 2:使用 ZIP 文件将 OpenSSH 升级到最新的 GitHub 版本
  • 选项 3:将 OpenSSH 升级到最新的 Windows 更新版本,而不是 GitHub 版本

选项 1:使用 MSI 安装程序将 OpenSSH 升级到最新的 GitHub 版本

注释

OpenSSH 安装在 C:\Program Files\OpenSSH 或 C:\Program Files\OpenSSH-Win64 中,具体取决于处理器。 安装程序会自动注册 OpenSSH 服务并更新 PATH 环境变量。

  1. 若要下载 MSI 安装程序,请转到 GitHub 上的Win32-OpenSSH 发布页,并下载最新的 Win64 或 Win32 OpenSSH .msi 文件。

  2. 若要安装新版本的所有组件,请以管理员身份打开 PowerShell 命令提示符窗口,并运行类似于以下 cmdlet 的 cmdlet:

    msiexec /i OpenSSH-Win64-v9.x.x.x.msi
    
  3. 若要仅安装客户端或服务器组件,请打开管理 PowerShell 命令提示符窗口,并根据需要运行类似于以下 cmdlet 之一的 cmdlet:

    msiexec /i OpenSSH-Win64-v9.x.x.x.msi ADDLOCAL=Client
    msiexec /i OpenSSH-Win64-v9.x.x.x.msi ADDLOCAL=Server
    
  4. 若要配置 OpenSSH 服务器服务,然后启动它,请在安装了服务器组件的计算机上运行以下 cmdlet:

    Start-Service sshd
    Set-Service sshd -StartupType Automatic
    

    如果未创建服务,请运行以下命令:

    PowerShell.exe -ExecutionPolicy Bypass -File "C:\Program Files\OpenSSH\install-sshd.ps1"
    

选项 2:使用 .zip 文件将 OpenSSH 升级到最新的 GitHub 版本

如果不想使用 MSI 包安装升级,可以使用 .zip 存档文件。

  1. 若要下载最新的 .zip 文件,请转到 GitHub 上的Win32-OpenSSH 发布页面,并下载相应的文件。

  2. 将 .zip 文件解压缩到 C:\Program Files\OpenSSH。

  3. 打开管理 PowerShell 窗口,更改为 C:\Program Files\OpenSSH 文件夹,然后运行以下命令:

    PowerShell.exe -ExecutionPolicy Bypass -File .\install-sshd.ps1
    
  4. 若要配置 OpenSSH 服务器服务,然后启动它,请运行以下 cmdlet。

    Start-Service sshd
    Set-Service sshd -StartupType Automatic
    

选项 3:将 OpenSSH 升级到最新的 Windows 更新版本,而不是 GitHub 版本

  1. 若要检查当前版本的 OpenSSH,请在 PowerShell 命令提示符下运行 ssh -V 。

  2. 若要卸载当前版本的 OpenSSH,请在 PowerShell 命令提示符处运行以下 cmdlet:

    Remove-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
    Remove-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
    
  3. 卸载软件后,重启 Windows。

  4. 若要从 Windows 更新安装最新版本,请在 PowerShell 命令提示符处运行以下 cmdlet:

    Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
    Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
    
  5. 若要配置 OpenSSH 服务器服务,然后启动它,请运行以下 cmdlet:

    Start-Service sshd
    Set-Service sshd -StartupType Automatic
    

步骤 3:根据需要创建防火墙规则

  1. 若要检查现有防火墙规则,请转到 OpenSSH 客户端计算机,并在 PowerShell 命令提示符处运行以下 cmdlet:

    Get-NetFirewallRule -DisplayName "*SSH*" | Get-NetFirewallPortFilter | Where-Object {$_.LocalPort -eq 22}
    
  2. 如果找不到现有的 SSH 规则,请打开管理 PowerShell 命令提示符窗口。 然后,运行以下 cmdlet:

    New-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -DisplayName "OpenSSH Server (SSH)" -Enabled True -Direction Inbound -Protocol TCP -LocalPort 22 -Action Allow
    
  3. 若要验证规则是否已正确配置,请再次运行 Get-NetFirewallRule 。

步骤 4:验证安装

  1. 确保 C:\ProgramData\ssh 仍具有以前的配置和密钥。 如有必要,请从备份还原此信息。

  2. 若要检查版本,请在 PowerShell 命令提示符下运行 ssh -V 。

  3. 若要检查服务状态和连接性,请在 PowerShell 命令提示符处运行以下 cmdlet:

    Get-Service sshd
    ssh localhost
    

    注释

    服务的显示名称为“OpenSSH SSH 服务器”。

  4. 若要验证你使用的是正确的 SSH 二进制文件,请在 Windows PowerShell 命令提示符处运行以下 cmdlet:

    Get-Command ssh.exe | Select-Object Source
    
  5. 若要检查错误,请打开事件查看器,然后选择 “应用程序和服务日志>OpenSSH>操作”。

  6. 确保管理员和用户可以进行身份验证。

  7. 若要避免路径冲突,请检查多个 OpenSSH 文件夹(通常位于 System32 文件夹中)。 如果存在多个 OpenSSH 文件夹,请保留最新的文件夹,并删除任何较旧的文件夹。

常见问题快速参考

症状 可能的原因 解决方案
SSH 服务未启动 主机密钥缺失或配置错误 还原备份的密钥并重启服务
身份验证错误 密钥文件权限不正确 确保只有系统管理员可以读取或写入密钥文件
旧二进制文件仍在运行 PATH 仍指向 System32\OpenSSH 删除或重命名过时的目录
端口 22 无法访问 缺少防火墙规则 为 TCP 端口 22 重新创建入站规则

资料来源与适用范围

资料来源
微软官方中文故障文档
适用范围
按正文的 Windows / Windows Server 适用版本;保留原文兼容性要求
内容语言
中文;命令、路径和错误标识保留技术原文
本地收录日期
2026-10-26
授权说明
CC BY 4.0

正文与所需资源由本站本地存储。查看来源及更新记录 ↗

请按适用版本和实际日志确认原因;本站没有对每一种系统或设备逐项执行文中的操作。