Gestion de Windows Powershell depuis un terminal Linux

31

Je gère des serveurs Windows Server 2012. J'apprends à PowerShell à gérer ces serveurs via la ligne de commande. Ma station de travail exécute Ubuntu et je gère généralement les serveurs Linux en me connectant via SSH.

Existe-t-il un moyen d'utiliser Windows PowerShell sur les serveurs Windows à partir de mon poste de travail Linux via la ligne de commande comme l'accès SSH sous Linux?

Ederson
la source
Il existe des produits tiers qui fournissent un serveur SSH pour Windows avec PowerShell comme shell par défaut. par exemple powershellserver.com
Zoredache
6
Personnellement, je préfère gérer Windows à partir d'une machine Windows (virtuelle) et Linux à partir d'une machine Linux. Cela semble aider à préserver ce qui reste de ma raison.
Michael Hampton
Je comprends ce que vous essayez de réaliser, mais tant que vous pouvez exécuter des commandes PowerShell sur un hôte Windows, ne pouvez-vous pas gérer les autres à partir de cette session PS?
Andy
@Andy - mon point exactement.
mfinni
Je m'intéresse au projet Pash ( github.com/Pash-Project/Pash ). Ils veulent réimplémenter PowerShell sur Linux. J'essaie maintenant de compiler sur une machine Raspberry Pi pour voir si je peux émettre à distance une commande d'arrêt
usr-local-ΕΨΗΕΛΩΝ

Réponses:

15

Quelques options:

  1. Installer un serveur SSH sur une machine Windows, SSH dans, exécuter Powershell sur la boîte Windows
  2. Exécutez un client RDP sous Linux, RDP dans, exécutez Powershell sur la boîte Windows
  3. Utilisez Powershell Web Access, frappez le serveur de passerelle POSH WA avec un navigateur, exécutez Powershell via le navigateur

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

Je ne connais aucun exécutable POSH pour Linux, donc vous ne pouvez pas exécuter les commandes POSH directement à partir d'un shell sous Linux - vous devez d'abord accéder à la machine Windows, comme RDP, console distante (DRAC, iLO), SSH, ou POSH Web Access.

/ Modifier - il semble qu'il y ait quelques options. http://sharpcodenotes.blogspot.com/2014/01/running-powershell-commands-from-linux.html

Vous pouvez essayer d'obtenir qu'OpenWSMan fasse ce que vous voulez, mais je pense que vous devrez créer chaque commande comme une demande d'URL plutôt que de simplement émettre la commande Powershell correcte - comme je l'ai dit, il n'y a pas vraiment de Powershell pour Linux. Vous pouvez installer la gemme Ruby WinRB sur chaque machine Windows, puis exécuter le code Ruby sur votre machine Linux pour appeler les commandes Powershell.

Dans aucun des cas, il ne semble que vous obtiendrez l'expérience Powershell interactive, comme la complétion de tabulation, l'aide, etc. Ceux-ci semblent être pour exécuter un script ou une seule commande, et vous devrez probablement capturer toutes les erreurs ou autres commentaires par toi-même. Vous n'allez pas obtenir une solution de première classe sous Linux.

/ Modifier à nouveau - oui, MSDN dit que cela aura tendance à être laid / maladroit. Même la solution simple / efficace qu'il donne ne semble pas amusante.

Bien que la communication à distance Powershell soit basée sur WS-Management, il s'agit en fait d'un protocole dans un protocole et essayer d'interagir directement avec PSRP (Powershell Remoting Protocol) nécessiterait essentiellement la réplication de Powershell sur le client.

mfinni
la source
Cela peut faire le travail ... mais je dois installer le serveur SSH sur chaque serveur Windows. Pour autant que je sache, PowerShel utilise WS-Management, un standard ouvert ... y a-t-il un client Linux qui fait ce type de connexion?
Ederson
2
Non monsieur. Une fois que vous avez un shell sur une boîte Windows (en supposant qu'il soit dans le même domaine que les autres boîtes Windows), vous pouvez utiliser Powershell Remoting. Ou vous pouvez utiliser DSC, Desired State Config. Ou vous travaillez peut-être sur des choses comme AD ou MS Exchange qui ne fonctionnent pas de toute façon sur un seul serveur, mais vous connectez au répertoire en utilisant le serveur DC ou CAS disponible.
mfinni
2
Once you have a shell on a Windows box you can use Powershell Remoting.- Sachez que vous rencontrerez presque certainement le problème d'authentification à 2 sauts avec cela. Vous devrez certainement utiliser l'authentification CredSSP.
Zoredache
Va-t-il se heurter à ce problème s'il poursuit l'une des deux premières méthodes? Je (pense que je) sais que vous n'avez pas ce problème en utilisant RDP.
mfinni
1
Juste pour noter, Pash ( github.com/Pash-Project/Pash ) pourrait potentiellement avoir cette capacité à un moment donné, mais cela sera probablement assez loin dans le futur. Ils essaient toujours de simplement implémenter les bases de PowerShell pour l'instant.
supercheetah
4

Oui, vous avez 2 options:

  1. Vous pouvez installer le serveur SSHd sur Windows et dans le chemin d'installation de configuration vers PowerShell.

    Pour cela, vous pouvez utiliser un didacticiel pour l' installation de SSHd et la configuration du chemin PowerShell.

    En bref:

    1. Installer freeSSHd
    2. Ajouter un nouveau compte d'utilisateur et autoriser l'accès SSH
    3. Activer le port SSH dans le pare-feu Windows
    4. Configurer le chemin d'accès à PowerShell.exe
  2. Accès Web PowerShell (uniquement Win Server 2012 R2)

    Là, vous avez un tutoriel sur Technet - blogs.technet.com/b/canitpro/archive/2013/11/14/step-by-step-deploy-powershell-web-access.aspx

zorbon.cz
la source
Cela peut faire le travail ... mais je dois installer et configurer le serveur SSH sur chaque serveur Windows. Pour autant que je sache, PowerShell utilise WS-Management, un standard ouvert ... y a-t-il un client Linux qui fait ce type de connexion?
Ederson
J'ai ajouté une option avec un lien, si vous pouvez 2012 R2, cela peut vous aider. Mais n'est toujours pas "intégré" et avec le client. Vous y accédez via le navigateur.
zorbon.cz
3

Testé dans Ubuntu 14.04 LTS

Téléchargez et installez winexe:

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

dpkg -i winexePTH1.1.0-1.deb

Utilisation basique

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

Par exemple:

echo -ne '\n' | winexe -U DOMAIN/USERNAME%PASSWORD //IP 'powershell.exe -command "Get-Process | Select-Object Name, ProcessName"' | sort -u
eishv
la source
2
Veuillez ajouter quelques détails pour expliquer cette réponse ...
Pierre.Vriens
2

Vous pouvez également installer win32-openSSH à la main depuis https://github.com/PowerShell/Win32-OpenSSH ou via Chocolatey https://chocolatey.org ou encore plus rapidement via Boxstarter (qui utilise Chocolatey sous le capot) https: // boxstarter.org (installation rapide https://boxstarter.org/packages/nr/win32-openssh ).

Cela prend un peu de configuration, mais c'est un port natif (ouais, pour de vrai!) Win32 maintenu par les gars de Microsoft qui font PowerShell.

Sinon, comme quelqu'un l'a mentionné, vous pouvez installer la gemme WinRM sur Linux et obtenir un peu de connectivité via le protocole WinRM, mais ce n'est pas aussi agréable que de démarrer une session PSSession.

De plus, les gens derrière la gemme WinRM (WinRb) envisagent également d'implémenter une interaction PowerShell plus native qui tunnelise PowerShell sur WinRM qui sera plus fonctionnel pour les téléchargements et plus rapide pour les autres opérations également. Voir cet article de blog, http://www.hurryupandwait.io/blog/a-look-under-the-hood-at-powershell-remoting-through-a-ruby-cross-plaform-len

dragon788
la source