2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Powershellで-Credentialにセキュアなファイルで資格情報を渡す方法

Posted at

はじめに

前回記事の続きで、Powershellでinvokeを使ってリモートでコマンドを実行するときにID/PWの情報をcredentialで渡す必要がある。
Get-Credential localhost\administratorでプロンプトが表示されてPWを入力するとID/PWが読み込まれるが、何度も入力(※)するのは面倒。
※Windowが開いてる間はキャッシュされています。

なので、ファイルでパスワードを読み込んでそれをcredentialに渡したい。ただ、PWを平文で渡すのは気が引ける…。
ということでなるべくセキュアな方法を調べました。

1.セキュアなパスワードファイルの作成

ConvertTo-SecureStringで平文からSecureStringに変換します。

PS C:\windows\system32> $Pass = "ZAQ!2wsx"
PS C:\windows\system32> $Securepass = $Pass | ConvertTo-SecureString -AsPlaintext -force
PS C:\windows\system32> $Securepass
System.Security.SecureString

これだとファイルから読み出すことができないので、ConvertFrom-SecureStringでSecurestringから暗号化された文字列に変換します。

PS C:\windows\system32> $encrypt = ConvertFrom-SecureString -SecureString $SecurePassword
PS C:\windows\system32> $encrypt
01000000d08c9ddf0115d1118c7a00c04fc…(割愛)
PS C:\windows\system32> $encrypt | Out-File C:\temp\encrypt.txt

これでセキュアなパスワードファイルができました。

2.credentialに渡してみる

Credentialに渡すときはSecureStringじゃないとだめなので、パスワードファイルをConvertTo-SecureStringで変換する。
変換したらCredentialに渡して使ってみる!

PS C:\windows\system32> $encrypt = Get-Content C:\temp\encrypt.txt
PS C:\windows\system32> $pass = ConvertTo-SecureString -String $encrypt
PS C:\windows\system32> $cre =New-Object System.Management.Automation.PSCredential "administrator",$SecurePassword
PS C:\windows\system32> Invoke-Command 192.168.1.10 -credential $cre -scriptBlock {Get-NetFirewallProfile |select-object name,enabled}

name           : Domain
Enabled        : False
PSComputerName : 192.168.1.10
RunspaceId     : 75f9bf5a-7ec7-4a68-a56d-ca5f7b7694b3

name           : Private
Enabled        : False
PSComputerName : 192.168.1.10
RunspaceId     : 75f9bf5a-7ec7-4a68-a56d-ca5f7b7694b3

name           : Public
Enabled        : False
PSComputerName : 192.168.1.10
RunspaceId     : 75f9bf5a-7ec7-4a68-a56d-ca5f7b7694b3

できた!

3.複合してみる

本当に平文にできるかやってみた。SecureStringからSecureStringToBSTRをかましてPtrToStringBSTRで複合できた!

PS C:\windows\system32> $encrypt = Get-Content C:\temp\encrypt.txt
PS C:\windows\system32> $pass = ConvertTo-SecureString -String $encrypt
PS C:\windows\system32> $pass
System.Security.SecureString
PS C:\windows\system32> $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pass)
PS C:\windows\system32> $BSTR
2674194756680
PS C:\windows\system32> $plaintext=[System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($BSTR)
PS C:\windows\system32> $plaintext
ZAQ!2wsx

参考URL

大変参考になりました!
https://www.vwnet.jp/Windows/WS08R2/PSPassword/SecurePassword.htm

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?