# 续期 $action = New-ScheduledTaskAction -Execute "reg.exe" -Argument 'delete "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod" /f' $principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest Register-ScheduledTask -TaskName "ResetRDSGrace" -Action $action -Principal $principal -Force Start-ScheduledTask -TaskName "ResetRDSGrace" Start-Sleep -Seconds 3 Unregister-ScheduledTask -TaskName "ResetRDSGrace" -Confirm:$false shutdown /r /t 0 # ---------------------------------------------------------------------- . 检查是否安装 OpenSSH Server PowerShell: Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*' 正常会看到: Name State ---- ----- OpenSSH.Client~~~~0.0.1.0 Installed OpenSSH.Server~~~~0.0.1.0 Installed 重点: OpenSSH.Server = Installed 表示 SSH 服务端已安装。 2. 检查 sshd 服务状态 Get-Service sshd 正常: Status Name ------ ---- Running sshd 如果: Stopped 启动: Start-Service sshd 设置开机启动: Set-Service sshd -StartupType Automatic 3. 检查 22 端口是否监听 执行: netstat -ano | findstr :22 正常: TCP 0.0.0.0:22 0.0.0.0:0 LISTENING xxxx 或者: TCP [::]:22 [::]:0 LISTENING 说明 SSH 已监听。 4. 查看是谁占用了22端口 拿上面的 PID: 例如: LISTENING 1234 执行: tasklist | findstr 1234 正常应该: sshd.exe 5. 检查 Windows 防火墙是否允许 SSH 入站 查看规则: Get-NetFirewallRule | Where-Object {$_.DisplayName -like "*SSH*"} 正常: OpenSSH-Server-In-TCP Enabled : True Direction : Inbound Action : Allow 如果没有规则: 添加: New-NetFirewallRule ` -Name "OpenSSH-Server-In-TCP" ` -DisplayName "OpenSSH Server SSH" ` -Protocol TCP ` -LocalPort 22 ` -Direction Inbound ` -Action Allow 6. 从其他机器测试22端口 Linux: nc -zv Windows服务器IP 22 例如: nc -zv 192.168.1.100 22 成功: succeeded Windows另一台机器: Test-NetConnection 服务器IP -Port 22 成功: TcpTestSucceeded : True 7. 检查 SSH 配置文件 位置: notepad C:\ProgramData\ssh\sshd_config 重点: Port 22 PasswordAuthentication yes PubkeyAuthentication yes 修改后重启: Restart-Service sshd 一键检查脚本 你可以直接复制: Write-Host "===== OpenSSH安装状态 =====" Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*' Write-Host "===== SSH服务状态 =====" Get-Service sshd Write-Host "===== 22端口监听 =====" netstat -ano | findstr :22 Write-Host "===== 防火墙SSH规则 =====" Get-NetFirewallRule | Where-Object {$_.DisplayName -like "*SSH*"}