像在Linux中一样通过SSH连接到Windows

对我来说最令人沮丧的是连接到Windows主机。 我不是Microsoft及其产品的对手或粉丝。 每个产品都有自己的目的。 但是,连接到Windows服务器对我来说真的很痛苦,因为有两点:很难配置(Hi WinRM和HTTPS),并且真的很不稳定(向海洋中的VM发送Hello RDP)。

幸运的是,我找到了Win32-OpenSSH项目。 我意识到我想分享自己的经验。 我相信这会帮助某人并节省很多神经。



安装方式:

  1. 手动地
  2. 通过Chocolatey 套餐
  3. 通过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.ps1FixUserFilePermissions.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文档

Source: https://habr.com/ru/post/zh-CN453694/


All Articles