与Windows机器的连接总是让我感到沮丧。 不,我不是Microsoft及其产品的反对者或支持者。 每种产品都是出于其目的而存在,但这并非如此。
连接到Windows服务器一直让我痛苦不堪,因为这些连接要么是通过一个位置进行配置的(Hello WinRM,带有HTTPS),要么运行得不太稳定(向海外虚拟机提供RDP的服务)。
因此,偶然偶然发现了
Win32-OpenSSH项目,我决定分享配置经验。 也许有人使用此工具可以节省很多精力。

安装选项:
- 手动地
- 通过巧克力包装
- 通过Ansible,例如角色jborean93.win_openssh
接下来,我将谈论第一个要点,以及其余的要点,因此一切都差不多。
我注意到该项目仍处于测试阶段,因此不建议在生产中使用。
因此,下载最新版本,当前为
7.9.0.0p1-beta 。 有32位和64位系统的版本。
在
C:\ Program Files \ OpenSSH中解压缩
必须进行正确的工作:只有
SYSTEM和admin组在此目录中具有写许可权。
使用位于此目录中的
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
并在用户文件夹及其
授权的文件中创建
.ssh目录。 我们在那里写公钥。
一个重要的说明:仅文件所在目录中的用户必须对此文件具有写权限。
但是,如果您对此有疑问,可以随时在配置中关闭权限检查:
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计算机很少时,以下情况非常不便:
所以,这里我们通过ssh,这里是rdp,
通常是带堡垒的最佳做法,首先是ssh隧道,然后通过RDP。 - 设置简单
我认为这很明显。 - 连接速度和使用远程计算机的速度
没有图形外壳;服务器资源和传输的数据量都被保存。
缺点:
- 不完全取代RDP。
,并不是所有的事情都可以从控制台上完成。 我的意思是需要GUI的情况。
本文中使用的材料:
链接到项目本身安装选项从
Ansible docs中无耻复制。