
1. 为什么要在Windows 10上部署OpenSSH如果你经常需要远程管理多台Windows服务器或者需要在不同设备之间传输文件OpenSSH绝对是你的好帮手。它比传统的远程桌面更轻量不需要图形界面支持而且所有传输数据都是加密的安全性更高。我在管理服务器集群时就深有体会当你有几十台Windows服务器需要维护时用RDP一台台登录简直是一场噩梦。而OpenSSH配合PowerShell脚本可以轻松实现批量操作效率提升不是一点半点。Windows 10从1809版本开始就内置了OpenSSH客户端和服务器组件但默认不安装。通过PowerShell我们可以快速完成部署和配置整个过程只需要几分钟。2. 环境检查与准备工作2.1 系统版本要求在开始之前先确认你的Windows 10版本是否符合要求。按下WinR输入winver回车确保系统版本至少是1809内部版本17763或更高。我遇到过不少朋友因为系统太旧而安装失败的情况所以这一步很重要。2.2 PowerShell版本检查以管理员身份打开PowerShell右键开始菜单选择Windows PowerShell(管理员)运行$PSVersionTable.PSVersion确保主版本号至少是5。如果低于这个版本建议先升级系统因为老版本的PowerShell可能不支持一些必要的命令。2.3 管理员权限验证在同一个PowerShell窗口中运行以下命令检查当前是否是管理员(New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)如果返回True说明你有管理员权限如果是False需要重新以管理员身份运行PowerShell。3. 一键安装OpenSSH组件3.1 检查现有OpenSSH安装状态先看看系统是否已经安装了OpenSSH组件Get-WindowsCapability -Online | Where-Object Name -like OpenSSH*这个命令会列出OpenSSH客户端和服务器的安装状态。如果State显示NotPresent说明需要安装。3.2 安装OpenSSH客户端和服务器安装客户端如果你只需要连接其他SSH服务器可以跳过服务器安装Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0安装服务器如果你需要让其他设备连接这台电脑Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0这两个命令执行后如果看到RestartNeeded : False说明安装成功且不需要重启。但根据我的经验有时候重启后配置会更稳定。3.3 验证安装结果再次运行检查命令确认State已经变为InstalledGet-WindowsCapability -Online | Where-Object Name -like OpenSSH*4. 配置OpenSSH服务器4.1 启动SSH服务安装完成后SSH服务默认不会自动启动。我们需要手动启动并设置为开机自启Start-Service sshd Set-Service -Name sshd -StartupType Automatic4.2 防火墙配置正常情况下安装OpenSSH服务器时会自动创建防火墙规则。但为了确保万无一失我们可以手动检查Get-NetFirewallRule -Name *ssh*如果看不到名为OpenSSH-Server-In-TCP的规则或者Enabled属性为False就需要手动创建if (!(Get-NetFirewallRule -Name OpenSSH-Server-In-TCP -ErrorAction SilentlyContinue)) { New-NetFirewallRule -Name OpenSSH-Server-In-TCP -DisplayName OpenSSH Server (sshd) -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22 }4.3 服务状态验证确认SSH服务正在运行Get-Service sshd状态(Status)应该是Running。如果不是可以尝试重启服务Restart-Service sshd5. 连接测试与故障排除5.1 本地连接测试首先在本地测试SSH连接是否正常ssh localhost第一次连接时会提示你确认主机密钥输入yes即可。然后会要求输入密码就是你当前Windows账户的密码。如果连接成功你会看到命令行提示符变成了类似这样的格式你的用户名计算机名 C:\Users\用户名输入exit可以退出SSH会话。5.2 常见问题解决如果连接失败可以按以下步骤排查检查服务是否运行Get-Service sshd检查端口监听状态netstat -ano | findstr :22应该能看到类似LISTENING的状态。检查防火墙规则Get-NetFirewallRule -Name *ssh* | Select-Object Name,Enabled查看SSH服务日志Get-EventLog -LogName Application -Source OpenSSH -Newest 106. 高级配置与优化6.1 修改默认端口为了安全考虑建议修改默认的22端口。编辑配置文件notepad C:\ProgramData\ssh\sshd_config找到#Port 22这一行去掉注释并修改端口号比如Port 2222保存后重启服务Restart-Service sshd别忘了在防火墙中也开放新端口New-NetFirewallRule -Name OpenSSH-Server-In-TCP-2222 -DisplayName OpenSSH Server (sshd) on 2222 -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22226.2 禁用密码认证启用密钥认证更安全的方式是禁用密码登录只允许密钥认证。编辑sshd_config文件PasswordAuthentication no PubkeyAuthentication yes然后把你公钥(id_rsa.pub内容)添加到C:\Users\你的用户名\.ssh\authorized_keys文件中如果没有这个文件需要手动创建。6.3 多用户配置如果需要允许特定用户或组使用SSH可以在sshd_config中添加AllowUsers 用户名1 用户名2 AllowGroups 组名或者拒绝某些用户DenyUsers 用户名 DenyGroups 组名7. 日常维护与管理7.1 服务管理命令汇总启动服务Start-Service sshd停止服务Stop-Service sshd重启服务Restart-Service sshd查看服务状态Get-Service sshd7.2 日志查看SSH登录日志会记录在Windows事件查看器中可以通过以下命令查看最近的登录事件Get-EventLog -LogName Security -InstanceId 4624 -Newest 10 | Where-Object {$_.Message -like *ssh*}7.3 卸载OpenSSH如果需要卸载OpenSSH组件# 卸载客户端 Remove-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0 # 卸载服务器 Remove-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0记得先停止服务Stop-Service sshd Set-Service -Name sshd -StartupType Disabled8. 实际应用场景8.1 批量执行远程命令通过SSH可以方便地在多台服务器上执行相同命令。比如要检查所有服务器的磁盘空间$servers server1,server2,server3 $cred Get-Credential foreach ($server in $servers) { Write-Host 检查 $server 磁盘空间... ssh $server df -h -Credential $cred }8.2 安全文件传输使用SCP命令在本地和远程服务器之间传输文件从本地复制到远程scp .\test.txt 用户名服务器IP:C:\目标路径\从远程复制到本地scp 用户名服务器IP:C:\路径\test.txt .\8.3 端口转发通过SSH隧道安全访问内网服务ssh -L 本地端口:目标地址:目标端口 用户名服务器IP比如把远程服务器的3389端口(RDP)映射到本地的33389端口ssh -L 33389:localhost:3389 adminserver1然后就可以通过localhost:33389访问远程桌面了。