姚令武 2025-11-26 04:35 采纳率: 98.4%
浏览 0
已采纳

OpenSSH在Windows中启动失败如何解决?

问题:在Windows系统中配置OpenSSH服务器时,常遇到“OpenSSH无法启动”或“服务启动失败”的问题。常见表现为手动启动sshd服务时提示“错误1067:进程意外终止”。可能原因包括sshd_config配置文件权限不当、缺少必要目录(如C:\ProgramData\ssh)、公钥路径错误或NTFS权限未正确设置。此外,若安装过程中未运行修复脚本(如FixHostFilePermissions.ps1和FixUserFilePermissions.ps1),也会导致服务因安全策略拒绝访问而启动失败。如何排查并解决此类权限与配置问题,确保OpenSSH服务正常启动?
  • 写回答

1条回答 默认 最新

  • 三月Moon 2025-11-26 09:32
    关注

    Windows系统中OpenSSH服务启动失败(错误1067)的深度排查与解决方案

    1. 问题现象概述

    在Windows Server或Windows 10/11环境中部署OpenSSH服务器功能后,常出现sshd服务无法启动的情况。事件查看器中通常记录如下错误信息:

    • “Windows无法启动OpenSSH SSH Server服务(位于本地计算机上)。”
    • “错误1067:进程意外终止。”

    此类问题多由权限配置不当、关键文件缺失或NTFS安全策略限制引发。

    2. 常见原因分类分析

    类别具体原因影响范围
    目录结构缺失C:\ProgramData\ssh 目录不存在服务初始化失败
    配置文件权限错误sshd_config NTFS权限不正确读取配置被拒绝
    主机密钥未生成缺少 moduli、ssh_host_*_key 文件加密协商失败
    脚本未执行FixHostFilePermissions.ps1 未运行安全策略阻止访问
    用户环境异常用户主目录权限受限公钥认证失败

    3. 排查流程图解

    graph TD
        A[尝试启动sshd服务] --> B{是否报错1067?}
        B -->|是| C[检查事件查看器日志]
        C --> D[定位具体错误描述]
        D --> E{是否有“Access Denied”或“Permission”关键词?}
        E -->|是| F[检查C:\ProgramData\ssh路径权限]
        E -->|否| G[检查sshd_config语法与路径]
        F --> H[运行Fix脚本修复权限]
        G --> I[验证主机密钥是否存在]
        I --> J[手动启动服务测试]
        J --> K{成功?}
        K -->|否| L[启用sshd调试模式]
        K -->|是| M[完成配置]
        

    4. 核心排查步骤详解

    1. 确认OpenSSH功能已正确安装
      使用 PowerShell 执行:
      Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
      若状态非“Installed”,需通过以下命令安装:
      Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
    2. 检查必要目录是否存在
      默认路径应为:
      C:\ProgramData\ssh\
      若不存在,可手动创建并设置基础结构:
      • ssh/
      • ssh/moduli
      • ssh/ssh_host_rsa_key
      • ssh/ssh_host_rsa_key.pub
    3. 生成缺失的主机密钥(如无)
      在管理员PowerShell中执行:
      cd "$env:ProgramData\ssh"
      ssh-keygen -A
      此命令将自动生成所有类型的主机密钥。
    4. 修复文件和目录权限
      Microsoft提供两个关键PowerShell脚本用于修复权限:
      .\FixHostFilePermissions.ps1 -Confirm:$false
      .\FixUserFilePermissions.ps1 -Confirm:$false
      脚本位于:
      C:\Windows\System32\OpenSSH\
    5. 验证sshd_config配置有效性
      检查关键参数是否正确指向路径:
      # 示例有效配置片段
      Match Group administrators
             AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
                  
      确保路径使用双下划线__PROGRAMDATA__而非直接写路径。
    6. 启用调试模式辅助诊断
      修改注册表以开启详细日志:
      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\sshd\Parameters\Debug
      设置为 1 后重启服务,查看输出到Event Log的调试信息。

    5. 高级排查手段与工具建议

    对于复杂环境,推荐结合以下方法进行深入分析:

    • 使用Sysinternals Suite中的Process Monitor抓取sshd.exe启动时的文件/注册表访问行为,过滤“ACCESS DENIED”事件。
    • 通过sc query sshdsc qc sshd检查服务配置是否指向正确的二进制路径。
    • 若怀疑防病毒软件干扰,临时禁用AV并重试启动服务。
    • 利用wevtutil qe Microsoft-Windows-OpenSSH/Operational /c:10 /f:text查看最近的操作日志条目。

    6. 自动化修复脚本示例

    为提高运维效率,可编写一键式修复脚本:

    # Repair-OpenSSH.ps1
    $sshDir = "$env:ProgramData\ssh"
    if (-not (Test-Path $sshDir)) {
        New-Item -ItemType Directory -Path $sshDir -Force
    }
    
    # 重新生成密钥
    Push-Location $sshDir
    ssh-keygen -A
    Pop-Location
    
    # 修复权限
    $scriptPath = "$env:SystemRoot\System32\OpenSSH\FixHostFilePermissions.ps1"
    if (Test-Path $scriptPath) {
        & $scriptPath -Confirm:$false
    }
    
    # 重启服务
    Restart-Service sshd -Force
        
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 11月27日
  • 创建了问题 11月26日