Windows Powershell vom Linux-Terminal aus verwalten

31

Ich verwalte Windows Server 2012-Server. Ich lerne PowerShell, um diese Server über die Befehlszeile zu verwalten. Auf meiner Workstation läuft Ubuntu, und ich verwalte normalerweise Linux-Server, indem ich mich über SSH verbinde.

Gibt es eine Möglichkeit, Windows PowerShell auf Windows-Servern von meiner Linux-Workstation über eine Befehlszeile wie den SSH-Zugriff unter Linux zu verwenden?

Ederson
quelle
Es gibt Produkte von Drittanbietern, die einen SSH-Server für Windows mit Powershell als Standardshell bereitstellen. zB powershellserver.com
Zoredache
6
Persönlich bevorzuge ich die Verwaltung von Windows von einer (virtuellen) Windows-Maschine aus und von Linux von einer Linux-Maschine aus. Dies scheint zu helfen, die Überreste meiner geistigen Gesundheit zu bewahren.
Michael Hampton
Ich bekomme, was Sie erreichen wollen, aber solange Sie auf einem Windows-Host Powershell-Befehle ausführen können, können Sie die anderen nicht von dieser PS-Sitzung aus verwalten?
Andy
@ Andy - genau mein Punkt.
Mfinni
Ich interessiere mich für das Pash-Projekt ( github.com/Pash-Project/Pash ). Sie möchten PowerShell unter Linux erneut implementieren. Ich versuche jetzt, auf einem Raspberry Pi-Computer zu kompilieren, um zu sehen, ob ich einen Befehl zum Herunterfahren aus der Ferne ausgeben kann
usr-local-ΕΨΗΕΛΩΕΨΗΕΛ

Antworten:

15

Einige Optionen:

  1. Installieren Sie einen SSH-Server auf einem Windows-Computer, und führen Sie Powershell unter Windows aus
  2. Führen Sie einen RDP-Client unter Linux, RDP in und Powershell in der Windows-Box aus
  3. Verwenden Sie Powershell Web Access, rufen Sie den POSH WA-Gatewayserver mit einem Browser auf und führen Sie Powershell über den Browser aus

http://technet.microsoft.com/en-us/library/hh831611.aspx

Ich kenne keine ausführbaren POSH-Dateien für Linux, daher können Sie POSH-Befehle unter Linux nicht direkt von einer Shell aus ausführen. Sie müssen sich zunächst auf eine Windows-Maschine wie RDP, Remote Console (DRAC, iLO), SSH usw. begeben. oder POSH Web Access.

/ Edit- sieht aus, als gäbe es einige Optionen. http://sharpcodenotes.blogspot.com/2014/01/running-powershell-commands-from-linux.html

Sie könnten versuchen, OpenWSMan dazu zu bringen, das zu tun, was Sie wollen, aber ich denke, Sie müssten jeden Befehl wie eine URL-Anfrage erstellen, anstatt einfach den richtigen Powershell-Befehl auszugeben - wie gesagt, es gibt kein tatsächliches Powershell für Linux. Sie können den Ruby-Edelstein WinRB auf jedem Windows-Computer installieren und dann Ruby-Code auf Ihrer Linux-Box ausführen, um Powershell-Befehle aufzurufen.

In beiden Fällen scheint es nicht so zu sein, dass Sie die interaktive Powershell-Erfahrung wie das Ausfüllen von Registerkarten, die Hilfe usw. erhalten. Diese dienen anscheinend zum Ausführen eines Skripts oder eines einzelnen Befehls, und Sie müssen möglicherweise Fehler oder andere Rückmeldungen erfassen allein. Unter Linux erhalten Sie keine erstklassige Lösung.

/ Edit again - ja, MSDN sagt, dass dies hässlich / klobig sein wird. Sogar die einfache / effektive Lösung, die er gibt, scheint keinen Spaß zu machen.

Obwohl Powershell-Remoting auf WS-Management aufbaut, handelt es sich tatsächlich um ein Protokoll innerhalb eines Protokolls, und der Versuch, direkt mit PSRP (Powershell Remoting Protocol) zu interagieren, würde im Wesentlichen die Replikation von Powershell auf dem Client erfordern.

mfinni
quelle
Dies kann den Job erledigen ... aber ich muss den SSH-Server auf jedem Windows-Server installieren. Soweit ich weiß, verwendet PowerShel WS-Management, einen offenen Standard. Gibt es einen Linux-Client, der diese Art von Verbindung herstellt?
Ederson
2
Nein Sir. Sobald Sie eine Shell auf einer Windows-Box haben (vorausgesetzt, diese befindet sich in derselben Domäne wie die anderen Windows-Boxen), können Sie Powershell Remoting verwenden. Oder Sie können DSC, Desired State Config verwenden. Oder Sie arbeiten an Dingen wie AD oder MS Exchange, die ohnehin nicht auf einem einzelnen Server ausgeführt werden, sondern eine Verbindung zum Verzeichnis mit einem beliebigen verfügbaren DC- oder CAS-Server herstellen.
Mfinni
2
Once you have a shell on a Windows box you can use Powershell Remoting.- Beachten Sie, dass Sie mit ziemlicher Sicherheit auf das Problem der 2-Hop-Authentifizierung stoßen werden. Mit ziemlicher Sicherheit müssen Sie die CredSSP-Authentifizierung verwenden.
Zoredache
Wird er auf dieses Problem stoßen, wenn er eine der beiden ersten Methoden anwendet? Ich (glaube ich) weiß, dass Sie dieses Problem mit RDP nicht haben.
Mfinni
1
Zu beachten ist, dass Pash ( github.com/Pash-Project/Pash ) möglicherweise irgendwann über diese Funktion verfügt, aber das wird wahrscheinlich noch ziemlich weit in der Zukunft liegen. Sie versuchen immer noch, die Grundlagen von PowerShell erst einmal zu implementieren.
Supercheetah
4

Ja, Sie haben zwei Möglichkeiten:

  1. Sie können den SSHd-Server unter Windows und im Konfigurationspfad zur PowerShell installieren.

    Hierfür können Sie das Lernprogramm zur Installation von SSHd und zur Konfiguration des PowerShell-Pfads verwenden.

    Zusamenfassend:

    1. Installieren Sie freeSSHd
    2. Fügen Sie ein neues Benutzerkonto hinzu und erlauben Sie den SSH-Zugriff
    3. Aktivieren Sie den SSH-Port in der Windows-Firewall
    4. Konfigurieren Sie den Pfad zu PowerShell.exe
  2. PowerShell Web Access (nur Win Server 2012 R2)

    Dort haben Sie ein Tutorial auf Technet - blogs.technet.com/b/canitpro/archive/2013/11/14/step-by-step-deploy-powershell-web-access.aspx

zorbon.cz
quelle
Dies kann den Job erledigen ... aber ich muss den SSH-Server auf jedem Windows-Server installieren und konfigurieren. Soweit ich weiß, verwendet PowerShell WS-Management, einen offenen Standard. Gibt es einen Linux-Client, der diese Art von Verbindung herstellt?
Ederson
Ich habe eine Option mit Link hinzugefügt, wenn Sie 2012 R2 können, dann kann dies Ihnen helfen. Aber immer noch nicht "eingebaut" und mit Client. Sie greifen über den Browser darauf zu.
zorbon.cz
3

Getestet in Ubuntu 14.04 LTS

Laden Sie winexe herunter und installieren Sie es:

wget https://passing-the-hash.googlecode.com/files/winexePTH1.1.0-1.deb

dpkg -i winexePTH1.1.0-1.deb

Grundsätzliche Verwendung

winexe -U DOMAIN/USERNAME%PASSWORD //MACHINEIP "cmd.exe"

Als Beispiel:

echo -ne '\n' | winexe -U DOMAIN/USERNAME%PASSWORD //IP 'powershell.exe -command "Get-Process | Select-Object Name, ProcessName"' | sort -u
eishv
quelle
2
Bitte fügen Sie weitere Details hinzu, um diese Antwort zu erklären ...
Pierre.Vriens
2

Sie können win32-openSSH auch manuell von https://github.com/PowerShell/Win32-OpenSSH oder über Chocolatey https://chocolatey.org oder noch schneller über Boxstarter (der Chocolatey unter der Haube verwendet) installieren https: // boxstarter.org (Schnellinstallation https://boxstarter.org/packages/nr/win32-openssh ).

Es braucht ein wenig Setup, aber es ist ein nativer (ja, wirklich!) Win32-Port, der von den Microsoft-Mitarbeitern unterhalten wird, die PowerShell ausführen.

Ansonsten könnte man, wie schon erwähnt, das WinRM-Gem unter Linux installieren und ein bisschen Konnektivität über das WinRM-Protokoll erhalten, aber das ist nicht so schön wie das Starten einer PSSession.

Darüber hinaus möchten die Leute, die hinter dem WinRM-Gem (WinRb) stehen, auch eine systemeigene PowerShell-Interaktion implementieren, die PowerShell über WinRM tunnelt und die sowohl für Uploads als auch für andere Vorgänge funktionsfähiger ist. Siehe diesen Blog-Beitrag, http://www.hurryupandwait.io/blog/a-look-under-the-hood-at-powershell-remoting-through-a-ruby-cross-plaform-len

dragon788
quelle