Obtenez de l'utilisateur actuel des informations d'identification de l'objet dans Powershell sans demander de confirmation
J'ai un script Powershell qui va être exécuté par le biais d'un outil d'automatisation sur plusieurs serveurs. Il fonctionne très bien sur des machines Windows, comme les appels distants d'utiliser l'outil de compte de service sans qu'il soit besoin de demander ou de l'exposer toutes les informations d'identification dans le code. Ce script fonctionne aussi contre les machines Linux via SSH à l'aide de la SharpSSH paquet. SharpSSH ne permet pas automatiquement d'utiliser le Powershell informations d'identification utilisateur, mais nécessite un nom d'utilisateur et le mot de passe, une clé RSA ou un fichier de PSCredential objet. Je ne peux pas demander les informations d'identification à l'aide de Get-Credential parce qu'il est en cours d'exécution par le biais de l'outil d'automatisation. Je ne veux pas exposer le nom d'utilisateur et le mot de passe dans le code ou avoir une clé RSA assis là-bas. Je voudrais construire un PSCredential objet à partir de l'actuel Powershell utilisateur (le compte de service). Essayer [Système.Net.CredentialCache]::DefaultNetworkCredentials montre un vide, et [Système.De sécurité.Principal.WindowsIdentity]::GetCurrent() ne fournit pas l'objet ou l'information dont j'ai besoin.
Quelqu'un aurait-il une méthode pour créer un PSCredential objet de l'utilisateur courant? Ou peut-être un complètement différentes alternatives pour résoudre ce problème?
Merci beaucoup!
Vous devez vous connecter pour publier un commentaire.
L'API Windows ne sera pas exposer les informations dont vous avez besoin, c'est pourquoi Powershell ne peuvent pas les atteindre. Ses une fonction intentionnelle du système de sécurité. La seule façon pour que cela fonctionne est pour les machines Linux de faire confiance à l'appel de la machine, telles que l'adhésion à un Active Directory (ou tout kerberos installation).
En dehors de cela, vous aurez besoin de stocker et de transmettre ces informations en quelque sorte.
Vous pouvez stocker la clé RSA de l'utilisateur dans le fichier de stockage des clés et l'extraire à l'exécution (à l'aide de l' .NET Crypto/Keystore libs), donc vous n'avez pas le stockage de la clé sur le code. De cette façon, la clé elle-même serait protégé par les OS et est disponible uniquement lors de l'appel de l'utilisateur a été authentifié. Vous auriez plus qu'une chose à installer, mais peut-être le seul moyen d'obtenir ce que vous visez.
Comment sur crypter le mot de passe à l'aide du compte de service de clé de chiffrement?
Un exemple rapide:
Exécuter PowerShell en tant que compte de service, exécutez la commande suivante et enregistrer la sortie dans un fichier texte (ou l'intégrer dans la tâche planifiée appel):
Utiliser la ligne suivante dans votre tâche planifiée afin de décrypter et utiliser le mot de passe:
Cela devrait faire l'affaire. Vous ne pouvez pas réutiliser le mot de passe crypté sur un autre ordinateur, même si, ou si pour quelque raison que ce soit vous détruire locaux du magasin de clés 🙂
Puisque vous pouvez obtenir le mot de passe en clair à partir d'une information d'identification de l'objet, je doute que vous pouvez obtenir ce sans demander de confirmation.