从Win101809和WindowsServer2019开始Windows开始支持OpenSSHServer。本文介绍一下其基本的概念和配置方法,本文演示用的环境为Win101809(ssh客户端)和WindowsServer2019(ssh服务器)。
OpenSSH客户端程序默认已经被系统安装好了,打开Settings->Apps->Manageoptionalfeatures面板就可以看到:
而OpenSSHServer默认没有安装,需要用户手动安装。点击上图中的"Addafeature"按钮,然后选择OpenSSHServer,并点击"Install"按钮:
开启服务安装完成后打开服务管理器,把OpenSSHAuthenticationAgent服务和OpenSSHSSHServer服务都设置为自启动,并启动这两个服务:
监听端口启动服务后可以通过netstat命令查看SSHServer服务是不是已经开始监听默认的22号端口了:
防火墙规则在安装OpenSSHServer的时候会在防火墙的入站规则中添加一条记录让防火墙放行对22号端口的访问:
服务器端的配置文件目录服务器端的配置文件在C:\ProgramData\ssh目录中,注意C:\ProgramData是一个隐藏目录:
Windows系统中OpenSSH的安装目录为C:\Windows\System32\OpenSSH,不管是客户端程序还是服务器端程序都这这个目录中:
OpenSSH服务器端程序的默认配置文件sshd_config_default也在这个目录中。这个目录会被添加到PATH环境变量中:
因为SSH客户端所在的目录被添加到了PATH环境变量中,在PowerShell中可以直接执行OpenSSH客户端的命令,比如ssh:
连接远程Linux主机使用ssh命令连接一下Linux主机,笔者的Linux主机为Ubuntu16.04,可以连接,但是欢迎信息显示了两次:
查看ssh命令的版本为7.7.2.1:
在另外一台机器上用个老一点的版本(7.6.0.0)试了试:
没有发现重复输出欢迎信息的问题,判断可能是新版本引入的bug。
连接成功后默认的shell是WindowsCommandshell(cmd.exe)程序:
在Windows系统中,PowerShell已逐渐成为主流,我们可以把默认的shell设置为PowerShell。其实就是在运行OpenSSHServer的Windows系统的注册表中添加一个配置项,注册表路径为HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH,项的名称为DefaultShell,项的值为C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe。我们可以以管理员身份启动PowerShell,然后执行下面的命令完成注册表项的添加:
现在重新连接远程服务器,默认的shell已经变成了PowerShell:
ssh-keygen命令ssh-keygen命令用来生成公钥认证使用的秘钥对,创建的秘钥一般都和ssh客户端的配置一起保存在用户家目录下的.ssh目录中(与Linux系统中类似):
执行ssh-keygen命令:
默认情况下一路回车就可以了,使用默认的文件名称和存放目录:
遗憾的是Windows下目前还没有提供ssh-copy-id命令,需要手动把用户的公钥添加到远程主机系统中的用户的authorized_keys文件中。具体在运行OpenSSHServer的主机上的操作步骤如下:在用户家目录下创建.ssh目录打开PowerShell,进入用户的家目录,用mkdir命令创建.ssh目录:
创建authorized_keys文件并加入公钥在PowerShell中执行notepad.ssh\authorized_keys命令创建文本文件,把客户端的公钥复制到这个文件中并保存。把文本文件的名称修改为authorized_keys:
修改ssh服务的配置文件以管理员权限打开PowerShell,执行命令notepadC:\ProgramData\ssh\sshd_config。注释掉配置文件中的最后两行然后保存:
注意:一定不要用Repair-AuthorizedKeyPermission命令修复.ssh\authorized_keys文件的权限。也不要以下面的方式创建.ssh\authorized_keys文件:
echo"publickey">.ssh\authorized_keysecho$null>.ssh\authorized_keys总结OpenSSH的支持让系统管理员有了一个方便的工具来管理Windows系统,相信OpenSSH+PowerShell的组合将成为管理Windows系统的黄金搭档。本文只是介绍了一些入门的概念,但给人的感觉是Windows上的OpenSSH工具尚需打磨(问题挺多的,按照文档配置个公钥认证就把人搞吐了)。