DEV Community

Cover image for Credential : comment les utiliser ?
Laurent LIENHARD for FrPSUG

Posted on

5

Credential : comment les utiliser ?

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
Enter fullscreen mode Exit fullscreen mode

Le résultat est le suivant

PS > $cred

UserName                           Password
--------                           --------
MonUtilisateur System.Security.SecureString
Enter fullscreen mode Exit fullscreen mode

Cette variable $cred peut-être utiliser par exemple dans la commande suivante

Enter-PSSession -ComputerName MonComputer -Credential $cred
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Dans le fichier c:\temp\password.txt le mot de passe se trouve sous cette forme

01000000d08c9ddf0115d1118c7a00c04fc297eb0100000057670149ac674a41ad9d185a8a82724b0000000002000000000010660000000100002000000093aaaf1ed598a69bbfb4cc77e81dfeb2786f26db6184538833af18054ef1a8a3000000000e800000000200002000000098c97f4f344d0159f337966d55060ad3297cae7515938457a713ddd9eaac5cdf200000003d986891fb27cb3983f798082083ac734d97d6235a186d3cc43db26f63bd44684000000018620d4739c0a26a6261e8c9867e94605cd35c61090c982999d5bb09fb54ec7d9a3499ebeb304c67720edfa37a34fe7fd4bce8fd8468dbee5081f56c81f4ce46
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode
PS > $cred

UserName                           Password
--------                           --------
MonUtilisateur System.Security.SecureString
Enter fullscreen mode Exit fullscreen mode

Comme dans le point 1 on se retrouve avec une variable $Cred utilisable dans la commande

Enter-PSSession -ComputerName MonComputer -Credential $cred
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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>
Enter fullscreen mode Exit fullscreen mode

Pour récupérer les informations il faut utiliser la commande

 $Cred = Import-Clixml -Path "c:\temp\user.xml"
Enter fullscreen mode Exit fullscreen mode

encore une fois on récupére bien notre variable $Cred

PS > $cred

UserName                           Password
--------                           --------
MonUtilisateur System.Security.SecureString
Enter fullscreen mode Exit fullscreen mode

Aujourd'hui, personnellement, j'utilise la méthode 3.

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Discover a treasure trove of wisdom within this insightful piece, highly respected in the nurturing DEV Community enviroment. Developers, whether novice or expert, are encouraged to participate and add to our shared knowledge basin.

A simple "thank you" can illuminate someone's day. Express your appreciation in the comments section!

On DEV, sharing ideas smoothens our journey and strengthens our community ties. Learn something useful? Offering a quick thanks to the author is deeply appreciated.

Okay