引言
筆者在《PowerShell 遠程執行任務》一文中提到了在腳本中使用用戶名和密碼的基本方式:
$Username = 'xxxx'$Password = 'yyyy'$Pass = ConvertTo-SecureString $Password -AsPlainText -Force$Cred = New-Object System.Management.Automation.PSCredential -ArgumentList $Username,$Pass
上面的代碼僅僅是能工作而已,因為在稍有安全性要求的環境中都不會允許明文密碼的出現。本文將介紹在 PowerShell 腳本中如何以比較安全的方式使用密碼。
把密碼轉為 SecureString
先來了解下面兩個概念:
SecureStringEncrypted Standard String
SecureString 是 .net 中的一個類型,它是為了解決安全性而設計出來的一種特殊的字符串類型。比如你使用一個密碼字符串創建 SecureString 對象,你無法通過這個對象還原出原來的密碼字符串,但是卻可以把 SecureString 對象當做密碼使用。
Encrypted Standard String 是指經過加密后的一個字符串。
ConvertTo-SecureString 命令可以通過明文的字符串創建 SecureString 對象:
$SecurePwd = ConvertTo-SecureString "123456" -AsPlainText -Force
然后再使用 $SecurePwd 創建 Credential 等身份信息。這種方式就是筆者在引言部分使用的方法,這是不安全的,因為任何能夠查看腳本的人都能從中找出密碼。
把 SecureString 轉為加密字符串
通過 ConvertFrom-SecureString 命令,我們可以把一個 SecureString 對象轉換成一個 Encrypted Standard String(加密后的一個字符串),然后保存到文件中。在創建 Credential 時直接使用前面保存的文件,從而避免明文密碼在系統中出現。
$SecurePwd = ConvertTo-SecureString "123456" -AsPlainText -ForceConvertFrom-SecureString $SecurePwd
上圖顯示 ConvertFrom-SecureString 命令生成的加密字符串,我們把它保存到文本文件中:
ConvertFrom-SecureString $SecurePwd | Out-File "D:/pwd.txt"
看看內容:
好了,接下來就可以直接使用 pwd.txt 文件了。
一種看起來比較正常,也很安全的推薦用法:
代碼如下:Read-Host "Enter Password" -AsSecureString | ConvertFrom-SecureString | Out-File "D:/pwd.txt"
執行這行命令,會要求你輸入密碼:
此處使用鍵盤輸入代替了明文的密碼字符串。
介紹了 ConvertFrom-SecureString 命令的用法后就可以介紹 ConvertTo-SecureString 命令的另外一個用法,把加密字符串轉換成 SecureString 對象:
|
新聞熱點
疑難解答