Letztens habe ich mich gefragt, ob es bei Windows eigentlich auch eine Art von “SSH-Zugang” gibt, wie wir es von Unix Systemen gewöhnt sind. Dass es mitlerweile mit der PowerShell möglich ist, Windows quasi per Konsole zu bedienen, lag es nahe dass da eigentlich eine solche Funktion vorhanden sein müsste.
Ihr denkt jetzt wahrscheinlich: “Verwende doch einfach RDP oder VNC”, aber das reicht eben nicht in jedem Fall. Kürzlich startete ich über RDP meinen Windows Server neu, jedoch blieb er irgendwo beim herunterfahren hängen (Ich sagte ja, Windows…). So, der RDP Dienst auf dem Server war bereits gestoppt, Zugang über RDP konnte ich also vergessen. Nun blieben mir 3 Möglichkleiten:
1. Anrufen und den Kollegen damit belästigen, meinen Server neu zu starten
2. Selbst hinfahren und neu starten
3. Remote über PowerShell!
Also hab ich sofort versucht über die PowerShell zu verbinden, was dann auch gelang. Mit shutdown /r /f konnte ich dann den Neustart erzwingen und siehe da, es hat geklappt. Wahrscheinlich hing Windows bevor es den Windows Remote Management Service gestoppt hat, also Glück gehabt.
Die PowerShell ist ab Windows 7 / Server 2008 standardmässig mit dabei, bei XP/Vista/Server2003 kann sie unter folgendem Link heruntergeladen und nachinstalliert werden: MS Download Center
Zu den Einstellungen die gemacht werden müssen:
(Da alle Einstellungen ins System eingreifen, sollte die Powershell als Administrator ausgeführt werden, ansonsten erhaltet ihr die Fehlermeldung “Access is denied. You need to run this cmdlet from an elevated process.”)
Server:
Auf dem Server muss Set-WSManQuickConfig in der Powershell ausgeführt werden. (Hinweis: Es kann auch die Tabulator-Taste zur Vervollständigung der Befehle verwendet werden)
Dieser Befehl startet den Windows Remote Management Service (WS-Management), setzt den Service auf Autostart, erstellt einen Listener der Verbindungen von allen IP’s akzeptiert und erstellt zudem eine Firewall-Regel die den WS-Management Traffic zulässt.
Damit dies funktioniert, muss das Netzwerk für Windows vertrauenswürdig sein, sprich kein öffentliches Netzwerk.
Client:
Damit ich nun von meinem PC aus verbinden kann, muss bei mir lokal dasselbe gemacht werden. Mit dem Befehl
Set-Item WSMan:\localhost\client\trustedhosts * -force füge ich dann automatisch meine Verbindungen zu den trusted hosts hinzu. Dies kann ein Sicherheitsproblem darstellen, für meine Testumgebung reicht dies aber.
Nun kann ich mit dem Befehl Enter-PSSession <remote-ip> -credential <username> eine Verbindung mit dem Server herstellen.