从 Win10 1809 和 Windows Server 2019 开始 Windows 开始支持 OpenSSH Server。本文介绍一下其基本的概念和配置方法,本文演示用的环境为 Win10 1809(ssh 客户端)和 Windows Server 2019(ssh 服务器)。

安装 OpenSSH Server

OpenSSH 客户端程序默认已经被系统安装好了,打开 Settings->Apps->Manage optional features 面板就可以看到:

而 OpenSSH Server 默认没有安装,需要用户手动安装。点击上图中的 "Add a feature" 按钮,然后选择 OpenSSH Server,并点击 "Install" 按钮:

开启服务
安装完成后打开服务管理器,把 OpenSSH Authentication Agent 服务和 OpenSSH SSH Server 服务都设置为自启动,并启动这两个服务:

监听端口
启动服务后可以通过 netstat 命令查看 SSH Server 服务是不是已经开始监听默认的 22 号端口了:

防火墙规则
在安装 OpenSSH Server 的时候会在防火墙的入站规则中添加一条记录让防火墙放行对 22 号端口的访问:

服务器端的配置文件目录
服务器端的配置文件在 C:\ProgramData\ssh 目录中,注意 C:\ProgramData 是一个隐藏目录:

安装目录

Windows 系统中 OpenSSH 的安装目录为 C:\Windows\System32\OpenSSH,不管是客户端程序还是服务器端程序都这这个目录中:

OpenSSH 服务器端程序的默认配置文件 sshd_config_default 也在这个目录中。这个目录会被添加到 PATH 环境变量中:

这样就可以在 PowerShell 中直接执行相关的命令而无需写出完整的路径。

Win10 自带的 OpenSSH 客户端

因为 SSH 客户端所在的目录被添加到了 PATH 环境变量中,在 PowerShell 中可以直接执行 OpenSSH 客户端的命令,比如 ssh:

连接远程 Linux 主机
使用 ssh 命令连接一下 Linux 主机,笔者的 Linux 主机为 Ubuntu16.04,可以连接,但是欢迎信息显示了两次:

查看 ssh 命令的版本为 7.7.2.1:

在另外一台机器上用个老一点的版本(7.6.0.0)试了试:

没有发现重复输出欢迎信息的问题,判断可能是新版本引入的 bug。

连接远程 Windows 主机
当 Windows 系统中安装好 OpenSSH Server 并开始监听端口后就可以通过远程的客户端来连接了。连接远程 Windows 主机与连接远程 Linux 主机相同,下面是通过密码登录的方式(nick 是 Windows 系统中的一个本地用户):

连接成功后默认的 shell 是 Windows Command shell (cmd.exe) 程序:

在 Windows 系统中,PowerShell 已逐渐成为主流,我们可以把默认的 shell 设置为 PowerShell。其实就是在运行 OpenSSH Server 的 Windows 系统的注册表中添加一个配置项,注册表路径为 HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH,项的名称为 DefaultShell,项的值为 C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe。我们可以以管理员身份启动 PowerShell,然后执行下面的命令完成注册表项的添加:

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

现在重新连接远程服务器,默认的 shell 已经变成了 PowerShell:

通过秘钥认证方式登录

前面我们介绍的 ssh 命令都是通过密码认证连接服务器的,下面介绍通过秘钥认证的方式登录服务器。

ssh-keygen 命令
ssh-keygen 命令用来生成公钥认证使用的秘钥对,创建的秘钥一般都和 ssh 客户端的配置一起保存在用户家目录下的 .ssh 目录中(与 Linux 系统中类似):

执行 ssh-keygen 命令:

> ssh-keygen

默认情况下一路回车就可以了,使用默认的文件名称和存放目录:

遗憾的是 Windows 下目前还没有提供 ssh-copy-id 命令,需要手动把用户的公钥添加到远程主机系统中的用户的  authorized_keys 文件中。具体在运行 OpenSSH Server 的主机上的操作步骤如下:
在用户家目录下创建 .ssh 目录
打开 PowerShell,进入用户的家目录,用 mkdir 命令创建 .ssh 目录:

> cd ~
> mkdir .ssh

创建 authorized_keys 文件并加入公钥
在 PowerShell 中执行 notepad .ssh\authorized_keys 命令创建文本文件,把客户端的公钥复制到这个文件中并保存。
把文本文件的名称修改为 authorized_keys:

修改 ssh 服务的配置文件
以管理员权限打开 PowerShell,执行命令 notepad C:\ProgramData\ssh\sshd_config。
注释掉配置文件中的最后两行然后保存:

#Match Group administrators
# AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

最后在服务管理器器中重启 OpenSSH SSH Server 服务,然后客户端就可以通过公钥认证的方式登录到远程服务器了。

注意:
一定不要用 Repair-AuthorizedKeyPermission 命令修复 .ssh\authorized_keys 文件的权限。
也不要以下面的方式创建 .ssh\authorized_keys 文件:

echo "publickey" > .ssh\authorized_keys
echo $null > .ssh\authorized_keys

总结

OpenSSH 的支持让系统管理员有了一个方便的工具来管理 Windows 系统,相信 OpenSSH + PowerShell 的组合将成为管理 Windows 系统的黄金搭档。本文只是介绍了一些入门的概念,但给人的感觉是 Windows 上的 OpenSSH 工具尚需打磨(问题挺多的,按照文档配置个公钥认证就把人搞吐了)。

参考:
PowerShell/Win32-OpenSSH
OpenSSH in Windows
解决公钥认证问题

Windows10和Windows Server 2019支持OpenSSH的更多相关文章

  1. Windows Server 2019安装OpenSSH Server简明教程

    Windows Server 2019安装OpenSSH Server简明教程   Windows Server 2019内置OpenSSH Server组件了.只不过OpenSSH Server默认 ...

  2. Installing OpenSSH from the Settings UI on Windows Server 2019 or Windows 10 1809

    Installing OpenSSH from the Settings UI on Windows Server 2019 or Windows 10 1809 OpenSSH client and ...

  3. Windows Server 2019 预览版介绍

    在Windows server 2012.Windows server 2016还未完全普及的情况下,昨天Windows Server团队宣布Windows Server 2019将在2018年的下半 ...

  4. Windows Server 2019 容器化探索-Docker安装

    Docker on Windows Server 2019 微软自Windows Server 2016开始支持Docker,今天我们将介绍在Windows Server 2019上安装并使用Dock ...

  5. Windows Server 2019 SSH Server

    Windows Server 2019 SSH Server   在需要安裝的ws2019开启powershell,执行安装 openssh server 指令 Add-WindowsCapabili ...

  6. 手把手教您在 Windows Server 2019 上使用 Docker

    配置 Windows 功能 要运行容器,您还需要启用容器功能 Install-WindowsFeature -Name Containers 在 Window Server 2019 上安装 Dock ...

  7. 使用SSH连接Windows Server 2019 Core

    更新记录 本文迁移自Panda666原博客,原发布时间:2021年7月7日. 一.说明 Windows Server 2019 Core,是纯命令行的Windows Server版本,没有办法使用GU ...

  8. 用 Windows Server 2019 搭建求生之路服务器

    准备工作 要搭建一台 Windows Server 的求生之路服务器需要做以下几点前置工作: 购买一台云服务器,如腾讯云: 下载 SteamCMD: 安装 SourceMod.MateMod.L4dT ...

  9. 在Windows Server 2019上安装edge浏览器

    在Windows 2016和2019的正式版本中是不带Edge浏览器的.有些工具.网站也不支持IE浏览器了.对于偶尔需要在服务器上访问这些站点的管理员来说有些不方便.不过可以通过安装三方浏览器或者Ed ...

随机推荐

  1. Mapreduce案例之Pi值估算

    题目: 这个程序的原理是这样的.假如有一个边长为1的正方形.以正方形的一个端点为圆心,以1为半径,画一个圆弧,于是在正方形内就有了一个直角扇形.在正方形里随机生成若干的点,则有些点是在扇形内,有些点是 ...

  2. 数据结构与算法——常用排序算法及其Java实现

    冒泡排序 原理:依次比较相邻的两个数,将小数放在前面(左边),大数放在后面(右边),就像冒泡一样具体操作:第一趟,首先比较第1个和第2个数,将小数放前,大数放后.然后比较第2个数和第3个数,将小数放前 ...

  3. FlexPaper的深入了解和应用

    作者:tabb_ 零下疯度 推荐:无痕客 最近做项目需要用到flexpaper,所以想借此机会好好的研究一下. 这是官方的下载地址:http://flexpaper.devaldi.com/downl ...

  4. css居然有根据容器宽度自动截取长度加省略号功能,强大!!

    作者:☆威廉古堡♂ 项目中最初的做法(js截取): //字符长度截取包括中英文混合 function subStr(str, len) { str = str.toString(); var newL ...

  5. 第三章 URL与视图

    配置文件两种方式详解 先讲两种直接传参: 直接简单传参 app =Flask(__name__) app.config['DEBUG']=True app.config.update( DEBUG=t ...

  6. which/whereis

    which 查找二进制命令,按环境变量PATH路径查找 whereis 查找二进制命令,按环境变量PATH路径查找 查询命令的安装路径,配置文件路径

  7. Noip 模拟题 T2 数字对

    2.数字对 [题目描述] 小H是个善于思考的学生,现在她又在思考一个有关序列的问题. 她的面前浮现出一个长度为n的序列{ai},她想找出一段区间[L, R](1 <= L <= R < ...

  8. 《30天自制操作系统》学习笔记--Mac下工具的使用

    现在来介绍官网上下的工具怎么用首先是官网地址,书上有个注释上有:hrb.osask.jp 翻译成中文大概是这个样子滴. 上面有两个文件可以下载,一个是工具,一个是工具的源代码,很好的学习资料 下面把工 ...

  9. c++中类的初次接触

    下面是我写的简单的代码,初次接触c++中的类,c++真的是博大精深啊,学习c++的路还很长,加油! /*q1.cpp*/ //一个简单的类极其实例化 #include<iostream> ...

  10. asmlinkage的用法

    转自:https://www.cnblogs.com/china_blue/archive/2010/01/15/1648523.html https://blog.csdn.net/liujiaoy ...