こんにちは。
けいぞうです。
今回は、「PowerShellで暗号化したパスワードファイルを作成する方法」に関する記事です。
「プログラム中にパスワードを直書きすると良くないけど、どうやって暗号化して外だししたらいいんだろう?」
こんな疑問に答えていきたいと思います。
PowerShellの認証情報の保持方法について
PowerShellには「PSCredential」という型のオブジェクトが存在していて、これはズバリ認証情報を持つためのオブジェクトです。
このPSCredentialオブジェクトに、ユーザーのユーザー名とパスワードを保持させます。
使い方は以下のような感じになります。
$Credential = Get-Credential
この「Get-Credential」コマンドレットで取得できる情報が資格情報、すなわち「PSCredential」になります。このコマンドを実行すると、以下のようなポップアップが表示されて、ユーザー名とパスワードを入力することができます。
入力すると、$Credentialに資格情報が保持されるということです。繰り返しになりますが、$Credentialの方は「PSCredential」です。
ではこの、$Credentialの中身を見てみましょう。
たとえば、このダイアログにユーザー名「keizou」で、パスワード「password」と入れたとします。
その状態で、$Credentialの中身を見てみると、このように見えます。
このように、UserNameは見えますが、Passwordは「SecureString」となっていて、見ることができません。
「PSCredential」はこのように、パスワードを渡してあげたら、セキュアな状態で保持してくれるオブジェクトなのです。
PSCredentialのパスワードを平文に戻すには「GetNetworkCredential()」というメソッドを使います。
パスワードファイルの作成方法
では、この資格情報を使って、暗号化されたパスワードをパスワードファイルとして外だしする方法を見ていきます。
以下、サンプルスクリプトになります。
# 認証情報の生成
$Credential = Get-Credential
# パスワードファイルパス
$PasswordFile = "C:\work\PasswordFile.pass"
# パスワードファイルの生成
$Credential.Password | ConvertFrom-SecureString | Set-Content $PasswordFile
「$Credential.Password」のままだと、SecureStringと表示されるだけで、いわゆ保護された状態なので、これをファイル出力すると意味のない文字列になってしまいます。
これを、標準的な暗号化された文字列に変換するコマンドが「ConvertFrom-SecureString」になります。
これを「Set-Content」で渡してあげれば、指定した場所に暗号化した文字列として、ファイルにパスワードを外だしすることができます。
パスワードファイルからパスワードを複合する方法
今度は逆にファイルに保存されたパスワードファイルの暗号されている文字列を取得して、複合する方法です。
以下、サンプルスクリプトです。
# パスワードファイルパス
$PasswordFile = "C:\work\PasswordFile.pass"
# パスワードファイルからセキュアなパスワードを取得
$SecurePassWord = Get-Content $PasswordFile | ConvertTo-SecureString
# 認証情報を生成(ユーザー名はダミー)
$Credential = New-Object System.Management.Automation.PSCredential \"dummy\", $SecurePassword
# 平文を取得
$Credential.GetNetworkCredential().Password
逆に標準的な暗号化されたパスワードを、SecureStringに変換するコマンドレットが「ConvertTo-SecureString」になります。
これを、PSCredentialに一旦戻してあげているのが、8行目です。
ユーザー名は一旦何でもいいので、dummyとしています。
後は、最初の章で説明した「GetNetworkCredential()」メソッドを実行してあげれば、パスワードファイルから取得した文字列を平文に戻すことができます。
最近のコメント