Skill: sshd-setup (Windows 检查/启动 OpenSSH Server)
适用场景
当用户在 Windows 上需要:
- 开通/修复本机 SSH 服务(sshd)
- 检查 sshd 是否已安装、是否运行、端口 22 是否监听
- 安装 OpenSSH Server(系统能力包损坏/缺失时的 GitHub 离线兜底)
- 配置防火墙放行 22 端口、设置开机自启
- 配置密钥免密登录(可选步骤)
触发词
"开通ssh"、"启动sshd"、"安装openssh"、"ssh服务起不来"、"检查ssh服务"、"配置ssh服务"
安装
从 SkillHub 安装本技能后,即可用语义触发,或在终端中运行:
# 管理员 PowerShell
& "$env:USERPROFILE\.qclaw\skills\sshd-setup\setup_sshd.ps1"
全自动流程
- CHECK — 查 sshd 服务是否存在、sshd.exe 是否存在
- INSTALL — 优先
Add-WindowsCapability OpenSSH.Server;若 capability 报告已装但 sshd.exe 缺失(Windows 已知损坏坑),自动改用 GitHub 最新包OpenSSH-Win64.zip解压并运行install-sshd.ps1 - FIREWALL — 新建/复用入站规则
OpenSSH-In(TCP 22) - START —
Set-Service -StartupType Automatic+Start-Service sshd - [可选:KEY] 配置基于密钥的免密登录:
- 检测密钥登录是否已在工作(是则跳过)
- 生成 ed25519 密钥对(无密码)
- 写入C:\ProgramData\ssh\administrators_authorized_keys
- 修正权限icacls /inheritance:r /grant Administrators:F /grant SYSTEM:F
- 重启 sshd
- 测试localhost whoami验证登录成功 - VERIFY —
Get-NetTCPConnection -LocalPort 22确认监听
脚本幂等:已安装则跳过安装,已运行则忽略启动,密钥已工作则跳过配置,可反复运行。
已知坑(重要)
- 管理员账户密钥位置:Windows OpenSSH 对管理员组有
Match Group administrators规则,公钥必须放C:\ProgramData\ssh\administrators_authorized_keys,而非用户目录.ssh/authorized_keys。 - ssh-keygen 空密码参数:PowerShell 下
ssh-keygen -N ""会报 "Too many arguments"。脚本内用cmd /c绕开此问题。 - administrators_authorized_keys 权限:须
icacls /inheritance:r /grant Administrators:F /grant SYSTEM:F,否则 sshd 拒绝读取。 - PowerShell 执行策略:如果报"无法加载 .ps1",先执行
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser。 - 密钥登录设置的对象是当前管理员用户。以其他用户运行脚本会为该用户生成密钥。
- 需要管理员权限运行(脚本内以
#Requires -RunAsAdministrator标记)。