Ich habe in letzter Zeit überall geschwiegen. I SSH in Linux von Windows mit dem integrierten OpenSSH-Client, den Windows 10 seit Jahren liefert, von dem Sie nichts wussten.;) Du brauchst kein Putty für SSH mit Windows (es sei denn, es macht dich glücklich, dann putty an, mein Freund.)
OpenSSH-Server zu Windows hinzufügen
Von einer administrativen PowerShell aus sehe ich, welche OpenSSH-Sachen ich aktiviert habe. Ich kann dies auch tun, indem ich im Startmenü "Windows Features" eingebe.
> Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
Name : OpenSSH.Client~~~~0.0.1.0
State : Installed
Name : OpenSSH.Server~~~~0.0.1.0
State : NotPresent
Sieht so aus, als hätte ich das OpenSSH-Client-Zeug, aber nicht den Server. Ich kann SSH von Windows aus, aber nicht.
Ich werde es mit einem ähnlichen Befehl mit dem super Weirdo, aber anscheinend notwendigen Versionsding am Ende hinzufügen:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
SSHD unter Windows als Dienst starten
Sobald dies abgeschlossen ist (und Sie können dies natürlich auch mit OpenSSH.Client ausführen, um beide Seiten zu erhalten, wenn Sie dies nicht getan haben), können Sie den SSH-Server (als Windows-Dienst) damit starten und sicherstellen, dass er ausgeführt wird.
Start-Service sshd
Get-Service sshd
Da es sich um einen Windows-Dienst handelt, können Sie ihn als "OpenSSH SSH Server" in services.msc sehen und ihn so einstellen, dass er beim Start automatisch gestartet wird, wenn Sie möchten. Sie können dies erneut tun, wenn Sie möchten, über PowerShell
Set-Service -Name sshd -StartupType 'Automatic'
Denken Sie daran, dass wir SSH über Port 22 verwenden, sodass an dieser Stelle eine Firewall-Regel auf 22 eingeht. Es liegt an Ihnen, sich der Sicherheit bewusst zu sein. Vielleicht erlauben Sie SSH-Eingänge in Ihren Windows-Rechner nur mit öffentlichen Schlüsseln (keine Passwörter) oder vielleicht macht es Ihnen nichts aus. Sei dir nur bewusst, es liegt an dir, nicht an mir.
Jetzt kann ich von jedem Linux- (oder Windows-) Computer wie ein Profi SSH auf meinen Windows-Computer zugreifen! Hinweis:Ich verwende das .local-Domänensuffix, um sicherzustellen, dass ich keinen Computer in meinem VPN erhalte (der in meinem lokalen Subnetz bleibt)
$ ssh [email protected]
Microsoft Windows [Version 10.0.19041.113]
(c) 2020 Microsoft Corporation. All rights reserved.
scott@IRONHEART C:\Users\scott>pwsh
PowerShell 7.0.0
Copyright (c) Microsoft Corporation. All rights reserved.
https://aka.ms/powershell
Type 'help' to get help.
Loading personal and system profiles took 1385ms.
⚡ scott@IRONHEART>
Beachten Sie, dass ich beim SSH-Einstieg in Windows die Standard-cmd.exe-Shell erhalten habe. Denken Sie auch daran, dass es einen Unterschied zwischen einer Konsole, einem Terminal und einer Shell gibt! Ich kann mit jedem Terminal in jede Maschine ssh und bei jeder Shell landen. In diesem Fall war der DEFAULT cmd.exe, was suboptimal ist.
Konfigurieren der Standard-Shell für OpenSSH in Windows
Auf meinem Server (dem Windows-Rechner, auf dem ich SSH verwende) werde ich einen Registrierungsschlüssel festlegen, um die Standard-Shell festzulegen. In diesem Fall verwende ich Open Source Cross-Plattform PowerShell Core. Sie können alles verwenden, was Sie glücklich macht.
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Program Files\PowerShell\7\pwsh.exe" -PropertyType String -Force
Wenn ich jetzt von woanders auf meinen Windows-Rechner ssh (sogar mein iPad!), erhalte ich die Shell, die ich will:
$ ssh [email protected]
PowerShell 7.0.0
Copyright (c) Microsoft Corporation. All rights reserved.
https://aka.ms/powershell
Type 'help' to get help.
Loading personal and system profiles took 1854ms.
⚡ scott@IRONHEART>
Noch besser, wenn ich meinem Windows-Terminal einen Menüpunkt (Profil) mit einem Eintrag für meinen Windows-Rechner hinzufügen wollte, der mich automatisch von woanders mit öffentlichen Schlüsseln anmelden würde, könnte ich das auch tun!
Außerdem kann ich jetzt, da dies eingerichtet ist, WinSCP (erhältlich im Windows Store) sowie scp (Secure Copy) verwenden, um Dateien zu übertragen.
Natürlich können Sie auch WinRM oder PowerShell Remoting über SSH verwenden, aber für mein kleines internes Netzwerk fand ich diesen Mechanismus einfach und sauber. Jetzt ist mein Herumgeschwafel konfessionslos!
Sponsor: Haben Sie schon versucht, in Rider zu entwickeln? Diese schnelle und funktionsreiche plattformübergreifende IDE verbessert Ihren Code für .NET-, ASP.NET-, .NET Core-, Xamarin- und Unity-Anwendungen unter Windows, Mac und Linux.