J'ai du mal à trouver une solution pour étendre un cadre conçu pour les machines * nix aux fenêtres. La structure s’exécute actuellement d’un serveur * nix et de ssh vers d’autres serveurs * nix et exécute un grand nombre de commandes différentes, telles que la vérification des fichiers journaux, la synchronisation des fichiers depuis le contrôle de source, la soumission des journaux au contrôle de source, etc. Restez connecté pour savoir comment vous connecter aux machines Windows distantes et accéder à la ligne de commande. La connexion peut aussi provenir d’une autre machine Windows, elle n’a pas besoin de démarrer à partir d’une machine unix, elle peut aller de windows en windows au lieu d’unix pour windows.
Voici un exemple de la façon dont les commandes sont actuellement exécutées sur les systèmes Unix. Quelque chose comme ceci est dans une boucle qui passe par une liste de noms de serveurs. J'ai besoin de quelque chose comme ça pour fonctionner sur les machines Windows.
ssh ${user}@${server} "cd /app/app_name/logs; <export source control params>; <submit logs to source control>" >> Log.txt
De plus, je préférerais ne pas utiliser un outil tiers (mon budget est d'environ 0 $). J'ai vérifié PsExec et quelques autres, mais il semble que vous ayez besoin d'un accès administrateur ou que vous deviez passer les utilisateurs/passer en texte brut.
Utilisez Powershell Remoting: https://msdn.Microsoft.com/en-us/powershell/scripting/core-powershell/running-remote-commands
Copié-collé sans vergogne:
Remoting Windows PowerShell
La communication à distance Windows PowerShell, qui utilise le protocole WS-Management, vous permet d'exécuter n'importe quelle commande Windows PowerShell sur un ou plusieurs ordinateurs distants. Il vous permet d'établir des connexions persistantes, de démarrer des sessions interactives 1: 1 et d'exécuter des scripts sur plusieurs ordinateurs. Pour utiliser la communication à distance Windows PowerShell, l'ordinateur distant doit être configuré pour la gestion à distance. Une fois que vous avez configuré la communication à distance Windows PowerShell, de nombreuses stratégies de communication à distance sont disponibles. Le reste de ce document en énumère quelques-uns.
Commencer une session interactive
Pour démarrer une session interactive avec un seul ordinateur distant, utilisez l'applet de commande Enter-PSSession. Par exemple, pour démarrer une session interactive avec l'ordinateur distant Server01, tapez:
Enter-PSSession Server01
La commande Invite change pour afficher le nom de l'ordinateur auquel vous êtes connecté. À partir de ce moment, toutes les commandes que vous tapez à l'invite sont exécutées sur l'ordinateur distant et les résultats sont affichés sur l'ordinateur local.
Pour mettre fin à la session interactive, tapez:
Exit-PSSession
Exécuter une commande à distance
Pour exécuter une commande sur un ou plusieurs ordinateurs distants, utilisez la cmdlet Invoke-Command. Par exemple, pour exécuter une commande Get-UICulture sur les ordinateurs distants Server01 et Server02, tapez:
invoke-command -computername Server01, Server02 {get-UICulture}
La sortie est renvoyée sur votre ordinateur.
LCID Name DisplayName PSComputerName ---- ---- ----------- -------------- 1033 en-US English (United States) server01.corp.fabrikam.com 1033 en-US English (United States) server02.corp.fabrikam.com
Exécuter un script
Pour exécuter un script sur un ou plusieurs ordinateurs distants, utilisez le paramètre FilePath de la cmdlet Invoke-Command. Le script doit être sur ou accessible à votre ordinateur local. Les résultats sont renvoyés sur votre ordinateur local.
Par exemple, la commande suivante exécute le script DiskCollect.ps1 sur les ordinateurs distants Server01 et Server02.
invoke-command -computername Server01, Server02 -filepath c:\Scripts\DiskCollect.ps1
Établir une connexion persistante
Pour exécuter une série de commandes associées qui partagent des données, créez une session sur l'ordinateur distant, puis utilisez l'applet de commande Invoke-Command pour exécuter des commandes dans la session que vous créez. Pour créer une session à distance, utilisez la cmdlet New-PSSession.
Par exemple, la commande suivante crée une session à distance sur l'ordinateur Server01 et une autre session à distance sur l'ordinateur Server02. Il enregistre les objets de session dans la variable $ s.
$s = new-pssession -computername Server01, Server02
Maintenant que les sessions sont établies, vous pouvez y exécuter n’importe quelle commande. Et comme les sessions sont persistantes, vous pouvez collecter des données dans une commande et les utiliser dans une commande ultérieure.
Par exemple, la commande suivante exécute une commande Get-Hotfix dans les sessions de la variable $ s et enregistre les résultats dans la variable $ h. La variable $ h est créée dans chacune des sessions dans $ s, mais elle n'existe pas dans la session locale.
invoke-command -session $s {$h = get-hotfix}
Vous pouvez maintenant utiliser les données de la variable $ h dans les commandes suivantes, telles que la suivante. Les résultats sont affichés sur l'ordinateur local.
invoke-command -session $s {$h | where {$_.installedby -ne "NTAUTHORITY\SYSTEM"} }
Essayez tunnellier de Bitvise. C'est un client ssh. Il y a aussi un serveur ssh pour se connecter à une machine Windows. Les deux systèmes vous permettent d’établir des connexions très sécurisées avec des fonctionnalités plus avancées telles qu'un proxy Web ou un tunneling de port.
Installez le port OpenSSH pour Windows - c'est gratuit et fournit à la fois le client et le serveur.
J'aime beaucoup l'idée de PowerShell, bien que la configuration puisse prendre quelques minutes sur le serveur et le client.
Outre la réponse complète de Shanteva, qui suggère l'utilisation de PowerShell, vous devez également consulter Ici sur le site Web howtogeek pour savoir comment activer (et autoriser) une connexion à distance au serveur PowerShell. Une légère configuration est requise sur l’ordinateur serveur.
Deux choses importantes que vous devez faire: (Je n'ai pas besoin de mentionner que vous devez faire chaque configuration en tant qu'administrateur, n'est-ce pas? Ouvrez simplement PowerShell/cmd en tant qu'administrateur)
Sur l’ordinateur serveur, ouvrez PowerShell et exécutez:
Enable-PSRemoting -Force
Il y a aussi une autre façon de faire cela. Vous pouvez ouvrir une invite de commande et exécuter:
winrm -quickconfig
Il pourrait y avoir beaucoup plus de configurations à changer. Pas besoin pour l'instant.
Si les deux ordinateurs sont sur le même "domaine" (un groupe d'ordinateurs auxquels chacun a des règles et des rôles différents), la procédure semble être simple (je n'ai pas essayé cela).
MAIS, comme vous souhaitez probablement accéder à votre serveur via Internet (techniquement appelé réseau WAN, _), il existe certaines complications et vous devez modifier certaines configurations pour autoriser la connexion au serveur distant. Sur l'ordinateur CLIENT, activez le service WINRM. La procédure est similaire à celle décrite précédemment pour le serveur. Il suffit de lancer la commande:
Enable-PSRemoting -Force
(Encore une fois, il convient de noter! Certaines références indiquent que l’ordinateur client et l’ordinateur serveur doivent se trouver sur des réseaux "privés", sinon tout cela ne fonctionnera pas. Je reçois des messages d’erreur lorsque je lance la commande ci-dessus, mais tout fonctionne. Je ne suis pas sûr de ce fait. Consultez la page Web susmentionnée.)
Ensuite, exécutez l'ordinateur CLIENT dans PowerShell:
Set-Item wsman:\localhost\client\trustedhosts *
Ce qui signifie que le client fera confiance à tous les serveurs (hôtes). Enfin, lancez ceci (sur le CLIENT encore une fois, je le souligne):
Restart-Service WinRM
Vous êtes prêt à partir. Vérifiez le reste de la réponse de Shanteva. Sur l'ordinateur client, exécutez par exemple:
Enter-PSSession -ComputerName 12.34.56.78 -Credential Administrator
Il vous demandera un mot de passe et la console distante s'ouvre. Elle ressemble à ceci:
[12.34.56.78]: PS C:\Users\Administrator\Documents>
Puis entrez simplement les commandes comme vous le faites pour SSH.