Windows 2019/2022安装OpenSSH服务端

由于有些情况下会安装失败,这里记录一个可用(2023年10月)的操作教程。

为什么要安装OpenSSH

远程登到Windows敲命令吗?当然不是了,这不Windows啊!

然而ssh除了可以敲命令,还可以传文件、建隧道。这样就可以靠ssh来补充一些不足了:

  • Windows远程桌面上传下载文件速度很慢,而且连接不稳定。FTP需要安装和配置IIS,操作比较麻烦,而且不安全。而SSH容易安装,传文件既快又稳定,而且默认情况下需要本机用户认证才能登录,保证了安全性。
  • 如果你熟悉ssh隧道的用法,可以利用ssh来处理Windows的部分端口映射问题,例如将Windows服务器里的端口映射到本地。

先尝试安装自带的OpenSSH(不推荐)

打开PowerShell,输入(大小写无所谓,下同):

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

如果报错,直接看本文最后面的内容。如果没报错,继续执行:

Set-Service sshd -StartupType Automatic
Set-Service ssh-agent -StartupType Automatic

Start-Service sshd
Start-Service ssh-agent

# 检查SSH服务是否正常启动
Get-Service -Name *ssh* | select DisplayName, Status, StartType
# 检查防火墙规则,如果未放行,需要到“高级安全Windows防火墙”中放行22端口
Get-NetFirewallRule -Name *SSH*

如果安装失败了(推荐)

有时候Windows 2019安装OpenSSH会出错,而且无论如何都会失败。遇到这种情况,不要气馁,也没必要浪费时间去排查原因,直接去GitHub上下载个新版本就可以了。

下载地址:https://github.com/PowerShell/Win32-OpenSSH/releases

安装完成后记得在“服务”中将SSH设置为自动启动,并且在“高级安全Windows防火墙”的“入站规则”中开放服务器的22端口。

其他配置

防火墙规则

除了在“高级安全Windows防火墙”配置,也可以使用以下PowerShell命令来添加规则:

New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

允许免密(公钥)登录

修改C:\ProgramData\ssh\sshd_config文件,找到下面两行内容

Match Group administrators
       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

把这两行删掉,或者用#注释掉。

再创建C:\Users\你的用户名\.ssh\authorized_keys文件,将你的电脑的公钥写到里面,例如:

ssh-rsa AAAAB3...... 你的名字

保存,之后就可以直接用key登录服务器了。

默认启动PowerShell

登录进入服务器后,默认启动的是cmd。如果想换成PowerShell,可以修改注册表,或在PowerShell中输入以下命令:

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force

参见

  • OpenSSH Server configuration for Windows Server and Windows