各位小伙伴,你们好!

上一期我们介绍了在 Windows 上使用第三方软件 freeSSHd 来搭建 SSH 服务。

文章中也提到过,Windows 实际上是有自带 OpenSSH 可以直接利用的。

那为啥还要用第三方的 freeSSHd 呢?

原因很简单,这个 OpenSSH 服务端是从 Windows 10 1809Windows Server 2019 才开始支持的。

因此你想要直接用上 OpenSSH 的话,就要看验一验你的 Windows ,是不是满足版本需要哈!


那么这一期,我们就假定你的 Windows 完全满足上面提到的版本要求,来一起看一看 Windows 自带的 OpenSSH 服务是怎么搭建的吧!

至于什么是 SSH ,什么是 OpenSSH ,如果你还不太清楚,那么可以到前一期文章中自行查阅,这里就不多啰嗦了。

我们直接开干,从安装说起,期间再穿插可能的坑,一并给它填上。


安装一点也不难,有键盘和鼠标就能操作,下面看图说话。

打开 Windows 设置,进入 应用


应用和功能 区域点击 可选功能OpenSSH 的服务端和客户端者属于可选功能)。


默认系统已经安装了 OpenSSH 客户端,而我们需要的是服务端,接着点击 添加功能


在列表中勾选 OpenSSH 服务器,并点击 安装 按钮开始安装。


就这样,只要网络正常,它就会自动开始安装了。


成功安装后的样子。


安装后 OpenSSH 相关程序都被放到了 C:\Windows\System32\OpenSSH 路径下。


如果不幸遭遇安装失败也别着急,通常是因为网络不佳造成的,不过请放心后面会有办法对付它。


我们再介绍一下命令行方式的安装方法,即使用 PowerShell 来安装 OpenSSH ,这也是官方推荐的另一方法。

先以管理员身份将 PowerShell 运行起来,然后用你那灵活的手指输入以下命令行。

Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
 


注意,命令行最后的那个 OpenSSH* ,瞧见最后的那个星号没,它是通配符,是指包括服务端 OpenSSH Server 和客户端 OpenSSH Client 两者我都要的意思。

要是这两个你都还没有安装过(有时默认客户端是已经安装好的),那么命令行执行后应该会得到类似如下的输出信息。

NotPresent 大概就是尚未安装的意思吧。

Name  : OpenSSH.Client~~~~0.0.1.0
State : NotPresent

Name  : OpenSSH.Server~~~~0.0.1.0
State : NotPresent
 


如下图,要是显示的状态是 Installed ,则说明我们已经成功安装过了。


当然,要是你想挨个安装 OpenSSH ServerOpenSSH Client ,那么就按下面的命令行单独安装即可。

# 安装 the OpenSSH Server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

# 安装 OpenSSH Client
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
 


正常情况下就应该输出类似如下信息:

Path          :
Online        : True
RestartNeeded : False
 


命令行也挺简单哈!

好,前面我们也说了,要是网络不好安装失败可咋整啊?

请放宽心哈,现在我就给小伙伴们介绍一下离线安装大法!


没错,这种离线安装大法就是用安装包直接给它安装上,并且也能非常有效地搞定 Windows 10 版本 1809 以下或 Windows Server 2019 版本以下的系统,可谓是一举两得,居家旅行之必备良药啊!

自然这也是官方推荐的安装方法之一,可不是我乱说的哦!

不过很奇怪的是,微软官网上我没有找到下载安装包的地方,倒是在 GitHub 上找到一个叫作 Win32-OpenSSH 项目。

通过验证也确实是官方出品无疑。

我将下载放到文末,方便各位小伙伴下载使用,我们先来介绍如何离线安装吧!


有个意思的地方,从下载项上看,除打包的 zip 文件外还有一个 msi 的安装程序,这就更加方便了。


我们先拿 OpenSSH-Win64.zip 的打包程序来演示一下安装方法。

将它下载并解压到 C:\Program Files\OpenSSH 中,切记,不要放在别的路径下,这是官方要求的。


接着打开命令提示符窗口,切换到 OpenSSH 所在目录后执行安装脚本。

// 切换目录
cd C:\Program Files\OpenSSH

// 执行安装脚本
powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1
 


如果是离线安装地话,我们还需要视情况而定,再设置开机自动启动 sshd 服务。

# 开机自动启动 sshd 服务
sc config sshd start=auto

# 手动启动 sshd 服务
net start sshd
 


离线安装也很容易搞定是不是?

如果你是低版本的 Windows 10 ,或是其他的如 Windows 7 的老系统,完全可以尝试使用这个离线安装包。


安装搞定,接下来我们还要来做几个善后工作,OpenSSH 才能正常为我们提供服务。


OpenSSH 默认服务端口是 22 ,那么我们要设置防火墙开放 22 号端口,当然你完全可以将 22 修改为你自己想要的其他数字。

如下一条命令就可以快捷搞定。

netsh advfirewall firewall add rule name=sshd dir=in action=allow protocol=TCP localport=22
 


当然,你水平够也可以自行开启防火墙设置。

比如,用以下命令打开高级安全 Windows Defender 防火墙。

wf.msc
 


然后设置后再查看名为 OpenSSH SSH Server (sshd) 的规则。

注意,只要开放了相应的端口就行,这个规则的名字并不一定要相同。


接着我们输入命令查看一下 SSH 服务是否已经启动,默认它安装完成后就会自动启动。

netstat -anp tcp

 

从输出结果中可以看到 0.0.0.0:22 ,说明 OpenSSH 服务正在愉快地工作。


安装部分基本告一段落,紧接着我们必须告诉 OpenSSH 我们应该怎么访问它。

说到访问,我们可以给 OpenSSH 配置一个默认的 shell


要使用 SSH 登录到目标服务器,总是要提供一个终端程序 shell 用于操作管理嘛!

默认情况下,Windows 的这个 shell 就是命令提示符 cmd.exe

通过 SSH 登录后会看到这个样子。


当然也可以修改为其他的,比如 PowerShell

以管理员身份运行 PowerShell ,然后就像下面这样,有兴趣的小伙伴可以试一试。

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

 


其实吧说穿了,就是在注册表里添加一项叫作 DefaultShell 的键值。

手脚勤快的小伙伴可以参考着用批处理啥的其他方式也能修改。


修改后再通过 SSH 登录后会看到这个样子。


接着我们要修改一下主要配置文件 sshd_config 了。

注意注意,这个配置文件默认在这里,否则改了半天都没效果,千万不要搞错了哦!

%programdata%\ssh\sshd_config

 


我们修改什么配置呢?

默认情况下,我们的用户可能还无法直接登录访问目标服务,因为有限制嘛!

这里呢就有四个允许或拒绝访问的参数,分别是:AllowGroupsAllowUsersDenyGroupsDenyUsers

这四个参数看字面意思也能看懂吧!

前两个是允许的组或用户,后两个是拒绝的组或用户。

需要注意的是,它们的处理顺序是这样的:先是 DenyUsers 、后是 AllowUsers 、然后是 DenyGroups ,最后是 AllowGroups

还有,必须以小写形式指定所有帐户名称。


还有还有,当配置域用户或组时,应该使用这样的格式:user?domain*

为避免与标准 Linux 模式冲突,因此用 * 来涵盖 FQDN

此外用 ? 而非 @ 也是避免与 Username@host 这种格式发生冲突。

工作组用户或组将解析为本地帐户名称,而域用户和组将严格解析为 domain_short_name\user_name 这样的 NameSamCompatible 格式。


好了,说了这么多要求,还是举几个例子来得直观一些。

# 域用户和组示例
DenyUsers contoso\该邮件地址已受到反垃圾邮件插件保护。要显示它需要在浏览器中启用 JavaScript。 : 拒绝来自 192.168.2.23 的 contoso\admin 
DenyUsers contoso\* : 拒绝来自 contoso 域的所有用户
AllowGroups contoso\sshusers : 仅允许来自 contoso\sshusers 组的用户

# 本地用户和组示例
AllowUsers 该邮件地址已受到反垃圾邮件插件保护。要显示它需要在浏览器中启用 JavaScript。
AllowGroups sshusers

 


OK,对于 WindowsOpenSSH 来说,基本的配置可以做到如此简单(其实有些配置只在 Linux 有效)!


通常我们连接 SSH 服务(也就是连接目标服务器)时,只要正确输入用户名和密码后就可以成功登录了。

当然了,第一次登录会询问用户并记录指纹信息,这个也不耽误登录哈!


确认继续连接并保存指纹信息后,只要输入正确密码即可成功登录。


不过要是除去用户名和密码输错的情况还登录失败,那么就会让人感觉有点不爽。

对了,接下来我们也一并说一说遇坑踩坑的问题吧。


首先一个,如果出现远程服务器信息改变而导致登录失败,原因应该是之前保存下来的指纹记录失效了。


这个问题并不一定 OpenSSH 设置本身的问题,可能是 IP 地址或域名变更等操作造成的问题。

这时可以将文件 known_hosts 中的对应登录目标服务器信息的所在行删除后再试。

C:\Users\用户名\.ssh\known_hosts

 


再一个,正好我也遇上了,说一下怎么解决出现登录失败时,总是提示“拒绝访问,请重试”的提示,类似如下。

网管小贾@localhost's password:
Permission denied, please try again.
网管小贾@localhost's password:
Permission denied, please try again.
网管小贾@localhost's password:
Permission denied (publickey,password,keyboard-interactive).

 


我们可以用调试大法,先将 OpenSSH 服务停止,然后用以下加 -d 参数的命令行方式开启调试模式。

sshd.exe -d

 


然后再连接登录试试看,通常会有相应错误提示。

我这边碰到的是绑定端口 220.0.0.0 失败,拒绝访问!


这个情况令我非常震惊,原因很直白也很简单,很明显 22 端口被占用了嘛!

真是奇了怪了,谁会占用默认的这个端口呢?

花了我个把钟头的时间,这才发现,之前安装的 freeSSHd 正努力地跑着,真是闹了个大乌龙!

好了,只要将占用端口的程序关闭,或者换个端口,一切问题也就迎刃而解了!

网上也小伙伴提出过类似的故障情况,可以作为参考,希望大家少走弯路,不再迷茫!


个人收集的 Windows 版的 OpenSSH 安装包(9.57M):

  • OpenSSH.7z - 在线安装后打包自 C:\Windows\System32\OpenSSH 文件夹的内容
  • OpenSSH-Win64.zip - Zip 压缩安装包
  • OpenSSH-Win64-v9.2.2.0.msi - 微软格式安装程序

下载链接:https://pan.baidu.com/s/1ynPUBwtfQaj8p1VB9xeeoA

提取码:

输入阅读密码,解锁隐藏内容...



★扫码关注公众号, 发送【001032】获取阅读密码


以上是我初步测试 WindowsOpenSSH 的亲身体验,分享给感兴趣的小伙伴们。

最后祝大家学习进步、食用愉快!


将技术融入生活,打造有趣之故事

网管小贾 / sysadm.cc


暂无评论

登录并提交评论

© 2020-present 网管小贾 | 微信公众号 @网管小贾
许可协议:CC-BY-NC 4.0 | 转载文章请注明作者出处及相关链接