Powershell : crypter vos mots de passe dans vos scripts
Powershell : crypter vos mots de passe dans vos scripts
Nous sommes souvent confronté à la problématique de mettre des identifiants d’accès tels que celui de l’administrateur du domaine ou d’un compte avec des droits d’accès spécifiques dans nos scripts. Afin de les rendre plus sécurisée, ce tutoriel « Powershell : crypter vos mots de passe dans vos scripts » vous montrera comment indiquer vos identifiants de manière crypté dans vos scripts.
Bien évidement, cela n’empêchera pas de pouvoir le décrypter, mais empêchera d’avoir le mot de passe juste en parcourant votre script.
La commande Powershell Get-Credential permet d’afficher une fenêtre d’identification vous demandant alors un nom d’utilisateur et un mot de passe. Cette commande va alors stocker ce mot de passe afin de le réutiliser (sans qu’il ne s’affiche en clair). Cela implique que les identifiants soient entrés manuellement.
Afin de ne plus avoir d’identifiants à entrer, nous allons stocker crypter le mot de passe et le stocker dans un fichier texte.
Avant tout, il vous faut définir votre clé de cryptage dans la variable $PassKey :
$PassKey = [byte]95,13,58,45,22,11,88,82,11,34,67,91,19,20,96,82
Nous allons lancer la commande suivante sur notre machine afin de stocker le mot de passe crypter dans un fichier .txt :
« Mon_Mot_De_Pass » | Convertto-SecureString -AsPlainText -Force | ConvertFrom-SecureString -key $PassKey | Out-file C:\temp\PassKey.txt
Remplacer Mon_Mot_De_Pass par votre mot de passe.
Vous pouvez également le nom et le chemin du fichier de sortie ( ici C:\temp\PassKey.txt )
En ouvrant le fichier c:\temp\PassKey.txt, vous vous attendez à voir le mot de passe :
Et bien celui-ci est stocké dans un format illisible à l’œil nue !
Passons maintenant au decryptage de cette chaîne de caractère pour l’utiliser dans notre script.
Nous allons donc créer la variable $Password contenant notre mot de passe :
$Password = Get-Content C:\Temp\PassKey.txt | Convertto-SecureString -Key $PassKey
Il faut ensuite ajouter les lignes contenant votre nom d’utilisateur (en remplaçant Domaine.local\administrateur par votre utilisateur) :
$User = « Domaine.local\Administrateur »
Et la ligne contenant l’ensemble des identifiants :
$Credentials = New-Object -TypeName « System.Management.Automation.PSCredential » -ArgumentList $User, $Password
Vous pouvez maitenant utiliser la variable $Credentials pour vous identifier comme dans cet exemple de connexion de vérification de service Windows :
Get-WmiObject win32_service -Credential $Credentials -ComputerName Nom_Du_Serveur
très intéressant mais moi quand je fais cette manipulation et que je me mets sur une autre machine cela ne fonctionne pas. Aurais tu une idée pour pouvoir le faire fonctionner
Même problème que Mokla
une solution ?
Merci
le cryptage se fait avec l’id de la machine, il est donc utilisable que sur la machine ou il a été crypté. Pour l’utiliser sur uen autre machine il faut de nouveau le crypter depuis cette machine
Bonjour,
Ne serait-il pas plus simple de faire :
$credential = Get-Credential
$credential | Export-Clixml .\account.xml -Encoding Default
$loadCred = Import-Clixml .\account.xml
?
Peut être non fonctionnel avec WMI ?