Stellen Sie wie unter Linux eine Verbindung zu Windows über SSH her

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:

  1. Manuell
  2. Über Schokoladenpaket
  3. 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 Github
Ansible Dokumente

Source: https://habr.com/ru/post/de453694/


All Articles