3 votes

Problème de permissions ? Putty + Plink + Pageant + Powershell + Tâche planifiée

Contexte

J'ai les composants suivants :

  • Un boîtier Windows Server 2008 R2
  • Un compte administrateur (le mien)
  • Un compte de service sur le domaine qui est un administrateur de la boîte.
  • Une installation de Putty (incluant plink pour la ligne de commande et Pageant pour la génération de la clé publique ssh)
  • Un fichier texte pour les commandes à utiliser pendant une session SSH
  • Un script powershell qui exécute plink qui utilise Start-Process pour invoquer plink avec des lignes de commande qui lui disent d'utiliser Ageant pour la connexion PuTTy et commands.txt pour la commande.
  • Une tâche planifiée qui s'exécute sous mon compte utilisateur

L'objectif

Finalement, pour que la tâche planifiée s'exécute en tant que compte de service, qui appelle powershell en tant que compte de service, qui exécute le processus et réalise les commandes ssh.

Le problème

  • Lorsque je lance ce script à partir d'une invite de commande powershell en tant que mon compte utilisateur, il s'exécute.
  • Lorsque j'exécute ce script à partir d'une tâche planifiée en tant que mon compte d'utilisateur, avec les permissions les plus élevées, et que je lui demande d'enregistrer mes informations d'identification, il "ne s'exécute pas".
  • Par "ne s'exécute pas", je veux dire qu'il semble lancer une instance de plink.exe, qui est l'endroit où je pense que le problème se produit (quelque chose de suspendu que je ne peux pas voir sur la console).

Questions

  • Quelqu'un a-t-il une solution globale un peu plus élégante, mais qui utilise les mêmes outils ou des outils similaires ?
  • Est-ce que mon script powershell doit plutôt invoquer cmd.exe pour que je puisse capturer le stdout dans mon fichier journal au moins ?

Le script

Au cas où ça aiderait :

#Starts the vcenter2 server.
#if the server is already started, it will tell you so.

#Stop an error from occurring when a transcript is already stopped
$ErrorActionPreference="SilentlyContinue"
Stop-Transcript | out-null

#Reset the error level before starting the transcript
$ErrorActionPreference="Continue"
Start-Transcript -path C:\Scripts\logs\StartTheVCenter2Server.log -append

#Run plink and reference the commands file to start up the server
Start-Process "C:\Program Files (x86)\PuTTY\plink.exe" -Argumentlist "-agent -m C:\Scripts\idrac_powerup_commands.txt root@[servernameredacted]" -wait -RedirectStandardOutput "C:\Scripts\logs\plinklog.log"

#Clean-up
Stop-Transcript

Réflexions ? Je vais probablement jouer avec Invoke-Command pour voir si je peux obtenir la redirection de la sortie dans mon journal au moins.

Gracias.

4voto

Evan Anderson Points 140581

La cause générale de plink.exe "Les messages que j'ai vus sont des invites à ajouter la clé d'hôte au registre. Je pense que la clé d'hôte est déjà dans votre registre, cependant. J'ajouterais la clé -batch argument pour plink et voyez si vous obtenez un échec pur et simple ou une suspension. Cela devrait vous mettre sur la bonne voie, au moins.

0 votes

Ahh, c'est un excellent point. J'ai ajouté la clé de l'hôte en tant que compte utilisateur, mais elle n'aurait pas été ajoutée en tant que compte serveur. Je vais utiliser PsExec pour lancer l'invite de commande en tant que compte de service et ajouter la clé hôte de cette façon pour m'assurer que ce n'est pas le problème. Je ferai un rapport ; merci pour l'astuce.

0 votes

Il est intéressant de noter que l'ajout de l'argument -batch ne s'est pas contenté de m'indiquer la raison de l'échec - il semble en fait l'avoir fait fonctionner ! Je vois la sortie que je m'attendais à voir dans le fichier journal. Après quelques tests supplémentaires, je vais confirmer que c'est la solution.

0 votes

Il a dû être suspendu à une invite, alors. J'espère que tout se passera bien. Je suis content d'avoir pu aider.

0voto

arober11 Points 417

Votre Plink L'appel utilise -agent (pageant) pour l'authentification, mais vous n'avez pas explicitement démarré le service, donc cela peut être le problème, exportez votre clé privée dans un fichier sans mot de passe et faites-y référence directement avec une balise -i (identité), pour voir si c'est l'authentification qui est en cause. Ajoutez aussi temporairement un -v (verbose), et vérifiez le journal des événements après.

0 votes

L'utilisation de -v -i -noageant et d'une clé privée sans mot de passe a produit les mêmes résultats - fonctionne parfaitement depuis la console, fonctionne parfaitement depuis l'invite de commande en appelant powershell.exe. C:\Path\To\<strkeep>script<strkeep>.ps1 -- et est suspendue à une tâche programmée. Je ne vois aucune sortie dans le journal des événements, même avec le drapeau -v.

0voto

Salman Points 1

Pour ce que cela vaut, j'ai eu un problème très similaire - psftp ne fonctionnerait pas dans un script qui était programmé dans Windows 7 pour s'exécuter que l'utilisateur soit connecté ou non. Dans mon cas, j'utilisais une session sauvegardée pageant référencée sur la ligne de commande ; et puisque le pageant ne s'exécute pas dans le même contexte que la tâche planifiée, il se bloquait. J'ai résolu le problème en utilisant le drapeau -i dans psftp et en référençant l'emplacement de la clé privée dans le script lui-même.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X