困擾了一個禮拜的加域問題,今天終於給拿下,想分享下這個過程。
shell
上個禮拜有User向領導抱怨他們的VM測試環境,須要不時的revert回去,須要從新加域。因爲這邊就只有個人帳號有加域的權限,且我還不具有委派權限給其餘帳號來加域。很明顯,若是我哪天休假,或者我不在office時候,User就應不了急。手動讓我key密碼的過程影響了user的工做效率,因而我想辦法來解決這個問題。bash
方案一:將.bat腳本轉換爲.exe可執行文件dom
第一個方案是以前一個同事幫我想出來的,使用早期加域使用的netdom命令寫成bat文件,而後使用一款名爲「Bat_To_Exe_Converter」的免費工具將bat轉換爲exe文件,以此來將顯示在bat中的明文來做隱藏。ide
測試了幾臺機器還比較順利,可是我的以爲轉換出來的exe文件執行起來有時並不那麼流暢,既然Microsoft有PowerShell的命令,這個裏面必定能夠大做文章,因而開始個人PowerShell之路。工具
在開始以前,我貼出bat文件用到的加域命令。測試
@ehco off echo You login account: %username% echo Start Joindomain... netdom join %computername% /domain:contoso.com /UserD:contoso.com\jason /PasswordD:P@ssword ehco. pause
方案二: PowerShell加密憑據加密
以前短暫接觸過PowerShell,好比處處AD的用戶和計算機等等,可是總體來講對PowerShell不是很熟悉。因而花了幾天功夫去找各種文檔。
blog
核心思想就是要可以將明文密碼加密來使用,且還要可以跨計算機和用戶來加密使用。文檔
一樣貼出個人PowerShell代碼,便於理解。get
個人環境有兩臺VM。
PC1: SHSV2018
PC2: SHSV2019
首先我將在PC1上創建一個share folder,設置權限爲Everyone讀取,裏面將存儲加密後的密碼文件,文件命名爲Password.txt。
加密過程代碼,使用128位AES加密。加密一個明文密碼並保存文件到PC1上
$File = "\\SHSV2018\SharePath\Password.txt" [Byte[]] $key = (1..16) $Password = "P@ssword" | ConvertTo-SecureString -AsPlainText -Force $Password | ConvertFrom-SecureString -key $key | Out-File $File
從PC1訪問加密密碼文件
$File = "\\SHSV2018\SharePath\Password.txt" [Byte[]] $key = (1..16) Get-Content $File | ConvertTo-SecureString -Key $key
從PC2訪問加密密碼文件
$File = "\\SHSV2018\SharePath\Password.txt" [Byte[]] $key = (1..16) Get-Content $File | ConvertTo-SecureString -key $key
經過以上兩個截圖能夠看出,遠程訪問加密文件並實現解密已經能夠成功實現。下一步就將整個加域的過程。
$File = "\\SHSV2018\SharePath\Password.txt「 [Byte[]] $key = (1..16) $encpasswd = Get-Content $File $ss = ConvertTo-SecureString -String $encpasswd -Key $key $cred = New-Object System.Management.Automation.PSCredential 'contoso\jason', $ss Add-Computer -DomainName contoso.com -Credential $cred
保存整段代碼爲AddJoindomain.ps1,右鍵選擇「Run with PowerShell」來執行整段代碼,實現加域過程。
參考以下文章來重點理解PowerShell加密的過程。
http://www.adminarsenal.com/admin-arsenal-blog/secure-password-with-powershell-encrypting-credentials-part-1/