Ansluter till Windows via SSH som Linux

Jag har alltid varit frustrerad över att ansluta till Windows-maskiner. Nej, jag är varken motståndare eller anhängare av Microsoft och deras produkter. Varje produkt finns för sitt eget syfte, men det är inte vad det handlar om.
Det har alltid varit oerhört smärtsamt för mig att ansluta till Windows-servrar, eftersom dessa anslutningar antingen är konfigurerade via ett ställe (hej WinRM med HTTPS) eller inte fungerar särskilt stabilt (hej RDP till virtuella maskiner utomlands).

Därför råkade ha stött på projektet Win32-OpenSSH, bestämde jag mig för att dela med mig av min installationsupplevelse. Kanske kommer det här verktyget att spara en massa nerver för någon.

Ansluter till Windows via SSH som Linux

Installationsalternativ:

  1. manuellt
  2. Genom paket Chocolaty
  3. Via Ansible, till exempel roll jborean93.win_openssh

Därefter kommer jag att prata om den första punkten, eftersom allt är mer eller mindre klart med resten.

Jag skulle vilja notera att det här projektet fortfarande är i betastadiet, så det rekommenderas inte att använda det i produktionen.

Så ladda ner den senaste versionen, just nu 7.9.0.0p1-beta. Det finns versioner för både 32- och 64-bitars system.

Packa upp C: Program FilesOpenSSH
En obligatorisk punkt för korrekt funktion: endast SYSTEM och administratörsgruppen.

Installera tjänster med ett skript install-sshd.ps1 finns i den här katalogen

powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1

Tillåt inkommande anslutningar på port 22:

New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

Förtydligande: applet Ny-NetFirewallRule används på Windows Server 2012 och senare. I de äldsta systemen (eller skrivbordet) kan du använda kommandot:

netsh advfirewall firewall add rule name=sshd dir=in action=allow protocol=TCP localport=22

Låt oss starta tjänsten:

net start sshd

Vid start kommer värdnycklar att genereras automatiskt (om de saknas) i %programdata%ssh

Vi kan aktivera autostart av tjänsten när systemet startar med kommandot:

Set-Service sshd -StartupType Automatic

Du kan också ändra standardkommandoskalet (efter installationen är standard cmd):

New-ItemProperty -Path "HKLM:SOFTWAREOpenSSH" -Name DefaultShell -Value "C:WindowsSystem32WindowsPowerShellv1.0powershell.exe" -PropertyType String -Force

Förtydligande: Du måste ange en absolut sökväg.

Vad händer nu?

Och så satte vi upp det sshd_config, som vi kommer att placera i C: Programdata. Till exempel:

PasswordAuthentication no
PubkeyAuthentication yes

Och skapa en katalog i användarmappen .ssh, och i den filen auktoriserade_nycklar. Vi skriver ner de publika nycklarna där.

Viktigt förtydligande: endast den användare i vars katalog filen finns ska ha rätt att skriva till denna fil.

Men om du har problem med detta kan du alltid stänga av rättighetskontrollen i konfigurationen:

StrictModes no

Förresten, in C: Program FilesOpenSSH det finns 2 skript (FixHostFilePermissions.ps1, FixUserFilePermissions.ps1), som bör men inte är skyldiga att fastställa rättigheter, inklusive med auktoriserade_nycklar, men av någon anledning registrerar de sig inte.

Glöm inte att starta om tjänsten sshd efter för att tillämpa ändringarna.

ru-mbp-666:infrastructure$ ssh [email protected] -i ~/.ssh/id_rsa
Windows PowerShell
Copyright (C) 2016 Microsoft Corporation. All rights reserved.

PS C:UsersAdministrator> 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:UsersAdministrator>

Subjektiva för-/nackdelar.

Fördelar:

  • Standardmetod för att ansluta till servrar.
    När det finns få Windows-maskiner är det väldigt obekvämt när:
    Så här går vi via ssh, och här använder vi rdp,
    och i allmänhet är den bästa praxisen med bastioner först en ssh-tunnel och RDP genom den.
  • Lätt att ställa in
    Jag tycker att detta är uppenbart.
  • Anslutningshastighet och arbete med en fjärrmaskin
    Det finns inget grafiskt skal, vilket sparar både serverresurser och mängden överförd data.

Nackdelar:

  • Ersätter inte RDP helt.
    Allt kan inte göras från konsolen, tyvärr. Jag menar situationer där ett GUI krävs.

Material som används i artikeln:
Länk till själva projektet
Installationsalternativ kopieras skamlöst från Ansible docs.

Källa: will.com

Lägg en kommentar