Information
Cette article a été rédigé pour une présentation du French Powershell UserGroup.
Cette présentaton peut-être vu sur Youtube sur la chaine du FRPSUG
Les différentes façons d'utiliser les credentials…
Demande Initiale
Dès mes débuts sur powershell, je me suis très vite posé la question de la gestion des credentials dans mes scripts
Du besoin simple qui est peut-être géré de façon basique à l'utilisation des credentials dans des scripts automatiques j'ai longtemps cherché le meilleur moyen de faire.
Traitement de la demande
1. Get-Credential
La façon la plus simple d'utiliser les credentials et d'utiliser la commande de base
$cred = Get-Credential -Message "Message affiché dans la popup" -UserName MonUtilisateur
Le résultat est le suivant
PS > $cred
UserName Password
-------- --------
MonUtilisateur System.Security.SecureString
Cette variable $cred
peut-être utiliser par exemple dans la commande suivante
Enter-PSSession -ComputerName MonComputer -Credential $cred
2. ConvertFrom-SecureString : Stockage sur le disque
Une autre solution, un peu plus avancée, est de stocker le mot de passe dans un fichier sur le PC.
Naturellement ce stockage doit se faire de facon sécurisée.
Comme précédement il faut d'abord créer l'objet $Cred
$cred = Get-Credential -Message "Message affiché dans la popup" -UserName MonUtilisateur
Dans un second temps nous allons stocker le mot de passe de facon crypté sur le disque dur
$Cred.Password | ConvertFrom-SecureString | Out-File C:\temp\password.txt
Dans le fichier c:\temp\password.txt le mot de passe se trouve sous cette forme
01000000d08c9ddf0115d1118c7a00c04fc297eb0100000057670149ac674a41ad9d185a8a82724b0000000002000000000010660000000100002000000093aaaf1ed598a69bbfb4cc77e81dfeb2786f26db6184538833af18054ef1a8a3000000000e800000000200002000000098c97f4f344d0159f337966d55060ad3297cae7515938457a713ddd9eaac5cdf200000003d986891fb27cb3983f798082083ac734d97d6235a186d3cc43db26f63bd44684000000018620d4739c0a26a6261e8c9867e94605cd35c61090c982999d5bb09fb54ec7d9a3499ebeb304c67720edfa37a34fe7fd4bce8fd8468dbee5081f56c81f4ce46
Pour pouvoir utiliser ce mot de passe stocké de façon sécurisé, il faut d'abord le décrypter. Pour ce faire nous allons procéder de la façon suivante
$Username = "MonUtilisateur"
$SecurePassword = Get-Content c:\temp\password.txt | ConvertTo-SecureString
$Cred = New-Object System.Management.Automation.PSCredential -ArgumentList $Username,$SecurePassword
PS > $cred
UserName Password
-------- --------
MonUtilisateur System.Security.SecureString
Comme dans le point 1 on se retrouve avec une variable $Cred
utilisable dans la commande
Enter-PSSession -ComputerName MonComputer -Credential $cred
3. Export-Clixml : Stockage sur le disque
L'avantage de cette méthodologie est que vous pouvez exploiter la polyvalence de PowerShell pour vous assurer que les données ne sont pas seulement exportées, mais également stockées de manière sécurisée à l'aide de chaînes sécurisées. Il convient de noter que ces fichiers d’informations d’identification créés ne peuvent être ouverts que par le même utilisateur sur le même système.
Pour créer le fichier d'export il faut procéder de la façon suivante
get-credential -message "mot de passe utilisateur ?" -UserName MonUtilisateur | Export-Clixml -Path "c:\temp\user.xml"
Le fichier c:\temp\user.xml contient les informations suivantes
<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
<Obj RefId="0">
<TN RefId="0">
<T>System.Management.Automation.PSCredential</T>
<T>System.Object</T>
</TN>
<ToString>System.Management.Automation.PSCredential</ToString>
<Props>
<S N="UserName">MonUtilisateur</S>
<SS N="Password">01000000d08c9ddf0115d1118c7a00c04fc297eb0100000057670149ac674a41ad9d185a8a82724b00000000020000000000106600000001000020000000dadd8864c9b930a2eb07a6745ac4fb5711912c318c401f7e35bb91d4d1cc180b000000000e8000000002000020000000b5a862ba266c236357445b773ca38d73ed124cf82d863ac4c11e2b48d57fca4b2000000054180930ba9fd53a6c4bdd9d7f69c044c88072b0d411486bccc1ca3cca417bf440000000d6197eafe8a133235bd1b44e376c3ff02e94da9f39b7d24b9a68ef5dbd629e44180ce15c3e67830d758fa1296f60a98cb2371ef915990c921e728f44c72c4cbd</SS>
</Props>
</Obj>
</Objs>
Pour récupérer les informations il faut utiliser la commande
$Cred = Import-Clixml -Path "c:\temp\user.xml"
encore une fois on récupére bien notre variable $Cred
PS > $cred
UserName Password
-------- --------
MonUtilisateur System.Security.SecureString
Aujourd'hui, personnellement, j'utilise la méthode 3.
Top comments (0)