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