Das Deprimierendste für mich ist, eine Verbindung zu Windows-Hosts herzustellen. Ich bin kein Gegner oder Fan von Microsoft und seinen Produkten. Jedes Produkt hat seinen eigenen Zweck. Es ist jedoch sehr schmerzhaft für mich, eine Verbindung zu Windows-Servern herzustellen, und zwar aus zwei Gründen: Es ist schwer zu konfigurieren (Hi WinRM mit HTTPS) und sehr instabil (Hallo RDP zu VMs über den Ozean).
Zum Glück habe ich das Projekt 
Win32-OpenSSH gefunden . Mir wurde klar, dass ich meine Erfahrungen damit teilen möchte. Ich glaube, es wird jemandem helfen und viele Nerven retten.

Installationsmöglichkeiten:
- Manuell
- Über Schokoladenpaket
- Sagen wir über Ansible die Rolle jborean93.win_openssh
Ich werde den manuellen Weg erklären, weil andere offensichtlich sind.
Ich muss beachten, dass sich dieses Projekt in der Beta-Phase befindet und es nicht empfohlen wird, es in der Produktion zu verwenden.
Laden wir die neueste Version herunter. Derzeit ist es 
7.9.0.0p1-beta . Es hat auch 32- und 64-Bit-Versionen.
Dann entpacken Sie es in 
C: \ Programme \ OpenSSH .
Wichtig: Es ist erforderlich, Schreibzugriff nur auf die Gruppe 
SYSTEM und Administratoren zu gewähren.
Installieren Sie die Dienste über das Shell-Skript 
install-sshd.ps1, das sich im OpenSSH-Verzeichnis befindet
powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1 
Lassen Sie uns eingehende Verbindungen an 22 Ports zulassen:
 New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22 
Hinweis: Das Applet 
New-NetFirewallRule gilt nur für Windows Server 2012 und höher. Für ältere oder Desktop-Betriebssysteme können Sie den folgenden Befehl verwenden:
 netsh advfirewall firewall add rule name=sshd dir=in action=allow protocol=TCP localport=22 
Starten Sie den Dienst:
 net start sshd 
Dadurch werden automatisch 
Hostschlüssel unter 
% programdata% \ ssh generiert, sofern diese noch nicht vorhanden sind.
Sie können den automatischen Start des Dienstes mit dem folgenden Befehl einrichten:
 Set-Service sshd -StartupType Automatic 
Sie können auch die Standard-Shell ändern (nach der Installation ist sie standardmäßig cmd):
 New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force 
Hinweis: Sie müssen den absoluten Pfad definieren.
Was kommt als nächstes?
Wir können 
sshd_config konfigurieren, das sich in 
C: \ ProgramData \ ssh befindet .
ZB:
 PasswordAuthentication no PubkeyAuthentication yes 
Dann erstellen wir das 
SSH- Verzeichnis im Benutzerverzeichnis ( 
C: \ Users \ <Benutzerverzeichnis> ) und 
die Datei " 
authorized_keys " darin. Wir können öffentliche Schlüssel in diese Datei einfügen.
Wichtig: Der einzige Benutzer, in dem sich das Verzeichnis befindet, muss über Schreibberechtigungen für diese Datei verfügen.
Übrigens, wenn Sie es nicht reparieren können, können Sie die Berechtigungsprüfung über config deaktivieren:
 StrictModes no 
Außerdem enthält das Verzeichnis 
C: \ Programme \ OpenSSH zwei Skripte ( 
FixHostFilePermissions.ps1 , 
FixUserFilePermissions.ps1 ), die Fix-Berechtigungen, einschließlich 
Berechtigungen für autorisierte Schlüssel , 
aber nicht erzwingen sollten, dies jedoch nicht.
Vergessen Sie nicht, den 
sshd- Dienst neu zu starten, um Änderungen zu übernehmen.
 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> 
Persönliche Vor- und Nachteile.
Vorteile:
- Standardmäßige Möglichkeit, eine Verbindung zu einem beliebigen Server herzustellen (Windows / Linux)
 Wenn Sie ein paar Windows-Hosts haben, ist dies unpraktisch:
 Also, hier gehen wir über ssh, aber hier über RDP,
 und im Allgemeinen ist es die beste Praxis mit Bastionen, zuerst SSH-Tunnel, dann RDP über den Tunnel. Oh, bring mich noch einmal um, Baby.
- Einfach zu konfigurieren
 Ich denke es ist offensichtlich.
- Verbindungsgeschwindigkeit zum Remote-Host
 Ohne GUI sparen wir Hostressourcen und die Größe der übertragenen Daten
Nachteile:
- In einigen Fällen kann RDP nicht ersetzt werden.
 Nicht alles, was Sie über PowerShell tun können. Ich meine die Fälle, in denen eine grafische Benutzeroberfläche erforderlich ist.
Links:
Projekt auf GithubAnsible Dokumente