对我来说最令人沮丧的是连接到Windows主机。 我不是Microsoft及其产品的对手或粉丝。 每个产品都有自己的目的。 但是,连接到Windows服务器对我来说真的很痛苦,因为有两点:很难配置(Hi WinRM和HTTPS),并且真的很不稳定(向海洋中的VM发送Hello RDP)。
幸运的是,我找到了
Win32-OpenSSH项目。 我意识到我想分享自己的经验。 我相信这会帮助某人并节省很多神经。

安装方式:
- 手动地
- 通过Chocolatey 套餐
- 通过Ansible,让我们说一下角色jborean93.win_openssh
我将解释手动方式,因为其他方式显而易见。
我必须注意,该项目处于测试阶段,不建议在生产中使用它。
好吧,让我们下载最新版本。 当前是
7.9.0.0p1-beta 。 它还具有32位和64位版本。
然后将其解压缩到
C:\ Program Files \ OpenSSH 。
要点:仅必须授予对
SYSTEM和Administers组的写访问权限。
此外,通过位于OpenSSH目录中的shell脚本
install-sshd.ps1安装服务。
powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1
让我们允许22端口的传入连接:
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
注意:小程序
New-NetFirewallRule仅适用于Windows Server 2012及更高版本。 对于较旧的或台式机操作系统,可以使用以下命令:
netsh advfirewall firewall add rule name=sshd dir=in action=allow protocol=TCP localport=22
启动服务:
net start sshd
如果它们不存在,它将自动在
%programdata%\ ssh下生成主机密钥。
您可以通过以下命令设置服务自动启动:
Set-Service sshd -StartupType Automatic
另外,您可以更改默认外壳程序(安装后默认为
cmd ):
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
注意:您必须定义绝对路径。
接下来是什么?
我们可以配置
sshd_config ,它位于
C:\ ProgramData \ ssh中 。
例如:
PasswordAuthentication no PubkeyAuthentication yes
然后,我们在用户目录(
C:\ Users \ <user_directory> )中创建
.ssh目录,并在其中创建
authorized_keys文件。 我们可以将公钥粘贴到该文件中。
重要提示:该目录所在的唯一用户必须对此文件具有写权限。
顺便说一句,如果您无法修复它,则可以通过config禁用权限检查:
StrictModes no
另外,目录
C:\ Program Files \ OpenSSH包含2个脚本(
FixHostFilePermissions.ps1 ,
FixUserFilePermissions.ps1 ),这些脚本应该(
但不是必须)提供修复权限,包括
authorized_keys权限,但不是。
不要忘记重新启动
sshd服务以应用更改。
ru-mbp-666:infrastructure$ ssh Administrator@192.168.1.10 -i ~/.ssh/id_rsa Windows PowerShell Copyright (C) 2016 Microsoft Corporation. All rights reserved. PS C:\Users\Administrator> Get-Host Name : ConsoleHost Version : 5.1.14393.2791 InstanceId : 653210bd-6f58-445e-80a0-66f66666f6f6 UI : System.Management.Automation.Internal.Host.InternalHostUserInterface CurrentCulture : en-US CurrentUICulture : en-US PrivateData : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy DebuggerEnabled : True IsRunspacePushed : False Runspace : System.Management.Automation.Runspaces.LocalRunspace PS C:\Users\Administrator>
个人优点/缺点
优点:
- 标准方式连接到任何服务器(Windows / Linux)
如果您有几个Windows主机,则很不方便:
所以,这里我们通过ssh,但是这里通过RDP,
通常来说,使用堡垒是最佳实践,首先是ssh-tunnel,然后是通过隧道的RDP。 哦,再杀死我一次。 - 易于配置
我认为这很明显。 - 与远程主机的连接速度
没有GUI,我们可以节省主机资源和传输数据的大小
缺点:
- 在某些情况下,它不能替代RDP。
并非您可以通过PowerShell做的所有事情。 我的意思是需要GUI的情况。
友情链接:
在github上的项目Ansible文档