Powershell kotiček

04.07.2023

Pri avtomatizaciji, ki jo rešujemo s pisanjem in uporabo PowerShell skript, se pogosto zgodi, da le-te uporabljamo na različnih operacijskih sistemih, v katere pa se moramo tudi avtenticirati, da dobimo dostope, ki jih potrebujemo za delo.

Pri večjem številu različnih gesel je težava v tem, da ali jih moramo znati na pamet (če so kompleksna, je to skoraj nemogoče) ali pa jih sproti kopirati iz primernega upravljalca gesel, kot so KeePass, LastPass, Bitwarden….  

Microsoft je zato pripravil Powershell modul SecretManagement, ki omogoča shranjevanje in branje gesel, Api ključev, oz vsega, kar lahko označimo za skrivnost, preko  razširitev, ki znajo dostopati do upravljalcev gesel kot so AZ.Vault, Chromium, KeePass, HashiCorp, itd. Gre pravzaprav za abstrakcijski nivo, ki ponuja iste ukaze za delo z različnimi »trezorji«, ki lahko shranijo naše skrivnosti lokalno ali v oddaljeni shrambi. Le ti so registrirani samo za trenutno prijavljenega uporabnika in so dostopne samo njemu.  

Za konfiguracijo teh »trezorjev« uporabimo ukaze iz Powershell.SecretStore modula. 
SecretStore je lokalna hramba/trezor, ki je na voljo v Powershell gallery. Teče v vseh okoljih, v katerih najdemo tudi Powershell 7. 

Namestimo ju z ukazoma 

Install-Module -Name Microsoft.PowerShell.SecretStore 

in 

Install-Module -Name Microsoft.PowerShell.SecretManagement 

Nato opravimo registracijo trezorja, s katero določimo vrsto le tega 

Register-SecretVault -Name Trezor -ModuleName Microsoft.PowerShell.SecretStore 

 -DefaultVault 

Z ukazom Register-SecretVault -Name 'CredMan' -ModuleName 'SecretManagement.JustinGrote.CredMan' recimo registriramo za uporabo Windows Credential Managerja. 

Sedaj lahko začnemo vpisovati naša gesla: 

Set-Secret -Name TestnaSkrivnost -Secret »TestnoGeslo« 

Vrednosti so lahko enega od tipov: byte, String, SecureString, PSCredential in Hashtable.  

Skrivnosti/gesla vpisujem in beremo s Set-Secret in Get-secret 

Set-secret -vault TestniTrezor -name TestnoGeslo -secret (get-credential TestniUporabnik) -metadata @{description »testno geslo za članek«} 

(Get-secret -vault TestniTrezor -name testnoGeslo).password | convertFreom-secureString -asplainText 

Ob prvi uporabi moramo podati tudi geslo, s katerim trezor zaklenemo, razen če ob registraciji tega izrecno ne definiramo.  

Set-SecretStorePassword -NewPassword $novogeslo -Password $starogeslo 

V določenem trenutku pri razvoju skripte pridemo do točke, ko je to geslo za odpiranje trezorja potrebno za dostop do tudi podatkov. Ker ga ne bomo interaktivno vnašali, vpis v tekstovno datoteko pa tudi ni primeren,  si bomo pomagali s funkcijami Export in Import-CliXML: 

$geslo=read-host -AsSecureString -prompt 'Vnesi geslo:' 

$pot=Join-path (split-path $profile) SecretStore.vault.credential 

$geslo | Export-CliXML $pot 

Install-Module -Name Microsoft.PowerShell.SecretStore, Microsoft.PowerShell.SecretManagement -Repository PSGallery -Force 

$geslo = Import-CliXml $pot 

Set-SecretStoreConfiguration -Scope CurrentUser -Authentication Password -PasswordTimeout (60*60) -Interaction None -Password $geslo -Confirm:$false 

Register-SecretVault -Name SecretStore -ModuleName Microsoft.PowerShell.SecretStore -DefaultVault 

Ko imamo to skonfigurirano, bomo ob vsaki uporabi skripte, ki bo uporabljala shranjena gesla, rabili le 

$geslo = Import-CliXml 'C:\Users\uporabnik\Documents\PowerShell\SecretStore.vault.credential' 

Unlock-SecretStore -Password $geslo 

Žal pa to ne bo delovalo za skripte, ki jih bomo morebiti poganjali prek razporejevalnika opravil. V tem primeru bomo morali umakniti geslo s trezorja 

Set-SecretStoreConfiguration -Authentication None 

Ukaz Reset-SecretStore pa uporabimo, da pobrišemo vso njegovo vsebino in ga nastavimo v začetno stanje.  

 
Aleš Lipušček
MCP, MCTS, MCITP
ales.lipuscek@kompas-xnet.si

Potrebuješ pomoč?
Potrebuješ pomoč?