Windows 10 原生 SSH 功能探索

on under windows
1 minute read

Windows 10 原生 SSH 功能探索

在 Windows 10 Insider 14352 中,增加了两个服务 SshBrokerGroup SshProxyGroup, 通过命令

netstat -aon |findstr "22"

即可找到 端口 22 绑定的进程也就是 SshProxyGroup 服务进程,而 22 端口是 SSH 服务器监听的端口, 在 Windows 目录 C:\Windows\System32 可以发现 几个与 SSH 相关的 dll 和 exe:

  • SshBroker.dll
  • SshProxy.dll
  • SshSession.exe
  • SshSftp.exe

实际上 Windows SSH 服务器名称应该是: Microsoft SSH Server for Windows

Insider

在 Windows 注册表中,对 SSH 服务配置

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\SshBroker
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\SshProxy
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy\FirewallRules
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Ssh\Broker

其中在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Ssh\Broker\DevToolsUser auth-method 中支持 key 和密码两种验证方式

UA 标识为 SSH-2.0-MS_1.100

SshSession Insider

SshSession 基于 C++ 开发,大量使用了 C++11 的特性,尤其是 lambda,加密 API 使用的是 Windows 自身的加密 API。

通过调试至少可以发现 SshSession 包含以下源码:

onecore\net\ssh\sshsession\session.cpp
onecore\net\ssh\channel\channeldirecttcpip.cpp
onecore\net\ssh\transport\transportimpl.cpp
onecore\net\ssh\auths\authsmethodpassword.cpp
onecore\net\ssh\authpublickey\authpublickeybase.cpp
onecore\net\ssh\kex\kexdiffiehellman.cpp
onecore\net\ssh\kex\kexgssapi.cpp
onecore\net\ssh\kex\hexecdh.cpp
onecore\net\ssh\kex\kexbase.cpp
onecore\net\ssh\kex\kexdhbase.cpp
onecore\net\ssh\kexhostkey\kexhostkeybase.cpp
onecore\net\ssh\mac\macbcrypt.cpp
onecore\net\ssh\cipher\cipherbcrypt.cpp
onecore\net\ssh\compression\compressionzlib.cpp
onecore\net\ssh\random\randomdefault.cpp
onecore\net\ssh\core\buffer.cpp
onecore\net\ssh\core\dispatcherport.cpp
onecore\net\ssh\core\timerimpl.cpp

如何体验

开启 SshProxy 和 SshBroker 服务,打开 MSYS2 或者 git for Windows 或者是 Bash on Windows (Bash on Windows 需指定账户名)

ssh localhost

输入当前账户密码即可登录。

关于服务

在 Windows Insider 14361 中,SSH Proxy ,SSH Broker 服务修改为非默认启动。

Windows 上 SSH 解决方案

在 Windows 上,SSH 客户端(服务器)解决方案有很多,包括

  • putty
  • secureCRT
  • MobaXterm
  • KiTTY
  • mRemoteNG
  • Xshell 4
  • Bitvise SSH Client
  • Token2Shell
  • Cygwin runtime based OpenSSH

Windows 10 UWP 应用的 SSH 客户端其中有免费方案 SSH Remote, 收费方案:Token2Shell/MD (Token2Shell 是桌面版) Token2Shell/MD 对于 DPI 缩放支持较好。

Token2Shell/MD

无论是 MSYS,MSYS2,Cygwin 中的 SSH 都是使用的 OpenSSH 方案,当然三者都是基于 cygwin 的兼容层实现的。

SSH 库

SSH 相应的库有多种实现,这里选择几个比较流行的实现:

Name License Language Features Who uses WebSite
libssh LGPL C C++ Client Serer, Linux, Windows, Unix,BSD Github https://www.libssh.org/
libssh2 MIT C Client , Linux, Windows, Unix,BSD libgit2 https://www.libssh2.org/
ssh.net Unknown C# Client , Windows Posh-SSH http://sshnet.codeplex.com

关于 Win32-OpenSSH

Windows PowerShell 团队在 Github 上,fork 创建了 Windows 平台原生的 OpenSSH Win32-OpenSSH, 在 Win32-OpenSSH 中,PowerShell 团队使用 IOCP, Win32 加密 API 来替代 OpenSSH 加密和网络方面的实现。这样一来,OpenSSH 在 Windows 上可以获得更优异的性能。

Update

14383 not found SSH Server Broker and SSH Server Proxy

14385 Found

14388 Not Found

14390 Not Found

14393 Red Stone Found

The End (2018-07-14)

Windows 内置的 SSH 服务器主要用于 IOT(?) 目前已经删除,目前 Windows 可以安装经过微软官方移植的 OpenSSH 客户端。