Windows中安装和使用SSH服务器

我居然到现在才知道Windows中可以通过添加可选功能的方式来直接安装OpenSSH作为SSH服务器,并且通常都已经安装过SSH客户端了

使用安装包安装

但是对于我的这个隔离的Windows 10来说,通过系统的可选功能(选择“开始”,在搜索框中键入可选功能 ,然后选择“可选功能”(也称为“管理可选功能”))却一直无法完成。查询了“无法安装 OpenSSH 功能”页面,感觉其前面介绍的方法都不好使,就其中一个表格中提到的GitHub上的发布页提供的安装包下载还挺方便的。下载其中的 OpenSSH-Win64-v10.0.0.0.msi 后直接安装,效果也是一样的。

安装后通过系统服务(services.msc)启动即可,也可以通过PowerShell(所有程序->Windows PowerShell,右键单击并选择“Run as Administrator”)以管理员身份运行,指令,

# Start the sshd service
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'
# 验证是否配置了相应的Windows的防火墙规则
if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue)) {
Write-Output "防火墙规则 'OpenSSH-Server-In-TCP' 不存在,开始创建..."
New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
} else {
Write-Output "防火墙规则 'OpenSSH-Server-In-TCP' 已存在。"
}

修改SSHD配置

在 Windows 中,sshd 默认的配置文件在 %programdata%\ssh\sshd_config。这个文件也需要使用“管理员”身份才能在编辑后保存。可以从所有程序中,或者从开始中搜索“记事本”(NotePad),然后右键单击其图标,选择“以管理员身份运行”,再从记事本应用的菜单里“文件”->“打开”来打开“C:\ProgramData\ssh\sshd_config”文件。

Windows中SSH服务器配置文件sshd_config的位置

Windows中SSH服务器配置文件sshd_config的位置

默认情况下,该配置文件中没有开启密钥验证,也没有开启转发功能。我恰好需要这两个。从配置文件中删除下面两行前面的 # 号来启用这两个选项。

PubkeyAuthentication yes
AllowTcpForwarding yes

重启 SSHD 服务以应用新的配置。仍然需要在刚才前面打开的 PowerShell 中运行命令,

Restart-Service sshd

保存用户公钥以使用证书登录Windows中的这个SSH服务器

关于使用证书登录SSH服务器的事情,曾经在配置 SSH 服务以使用证书登录 Linux 服务器这篇博文里介绍过了。该博文里同时也介绍过如何为自己生成公钥/密钥对。这里不再细说,仅补充一点公钥保存位置的特殊信息。

言归正传,在上一步修改 sshd_config 中的配置时,我们也注意到,在 PubkeyAuthentication yes 这一行的下面有说明 AuthorizedKeysFile .ssh/authorized_keys,即,用于认证的登录用户公钥保存在用户目录的 .ssh/authorized_keys 文件中。默认并没有创建 .ssh 这个文件夹,当然也就没有这个文件了。用户目录,一般是 C 盘(系统盘)的“用户”目录中以该用户登录名称命名的文件夹,如 C:\Users\zhx

但是我这里的用户 zhx 属于管理员组,也就是说,上面举例的用户 zhx 名字虽然不是 Administrator,但是他被加入了 Administrators 组(管理员组),拥有管理员一样的权限。因此,他的登录公钥并不保存在 C:\Users\zhx\.ssh\authorized_keys 文件中,而是在 %programdata%\ssh\administrators_authorized_keys 文件(即 C:\ProgramData\ssh\administrators_authorized_keys 文件)中,见这里。也就是说,跟前面的 sshd_config 在同一个文件夹中,但是默认并没有创建该文件。

依然需要使用“以管理员身份运行”的记事本应用来创建 administrators_authorized_keys 文件。将自己的公钥复制粘贴到这个文件中保存即可。需要注意的是,记事本在保存时会默认给这个文件加上扩展名 .txt。有扩展名就不对了,必须删除扩展名。

我为什么要做这个看起来很奇怪的事情?

原因其实也很莫名其妙。我想在这个Windows 10中运行EasyConnect以便使用单位里的一些网络服务。这个Windows 10是安装在KVM的虚拟机里的客户机,平时主要用来处理工作上的一些需要Windows的任务。而这个Windows 10虚拟机运行在我平常的主力系统openSUSE Tumbleweed里面。我希望从我的Linux主机里的浏览器直接访问单位的内网而不需要在主力机里安装EasyConnect。

做完上面的配置后,只要Windows 10里的EasyConnect登录了,我就可以从Linux主机里使用SSH转发来开启一个Socks5代理,然后在浏览器里配置 Zero Omega 自动根据访问的网址来选择使用这个代理。

这个代理配置起来很简单。只需要在Linux主机运行 ssh -N -D 9999 win10 即可打开一个 127.0.0.1:9999 的本地Socks5代理,使用上面这个 Windows 10 来转发网络访问。这个指令里的 win10 是我在 ~/.ssh/config 里配置的一个主机,内容如下,

Host win10 
       HostName 192.168.122.31 
       User zhx 
       Port 22 
       ServerAliveInterval 30 
       IdentityFile ~/.ssh/zhx2025_rsa

其中 192.168.122.31 是 Windows 10 的 IP 地址,zhx 是登录到 Windows 10 的里面的用户名,22 是默认的 SSH 端口,再下一行是自动保持连接30s内不自动断开,最后一行就是与前面保存到 C:\ProgramData\ssh\administrators_authorized_keys 中的用户公钥对应的私钥文件的路径。如果不配置这个,每次登录都需要写完整的命令行 ssh -N -D 9999 zhx@192.168.122.31,还得输入密码,怪麻烦的。

所以呢,大家看看,我们整天都在没事找事地忙些本来不需要做的事情。2026会变好吗?我只敢希望不要变得更差。©

本文发表于水景一页。永久链接:<https://cnzhx.net/blog/windows-server-setup-and-ssh-key-auth-configuration/>。转载请保留此信息及相应链接。

时间过去太久,评论已关闭。
如果您有话要说,请到讨论区留言并给出此文章链接。
谢谢您的理解 :-)