忘記 Azure Virtual Machines 密碼怎麼辦? 如何利用 PowerShell 重設密碼
感謝北科大劉建昌同學翻譯 Keith Mayer 發表的文章 https://blogs.technet.com/b/keithmayer/archive/2014/06/26/microsoft-azure-virtual-machines-reset-forgotten-admin-password-with-windows-powershell.aspx ,這是 Microsoft Azure Virtual Machines 用戶常見問題之一。
使用 Windows PowerShell 重新設定 Microsoft Azure Virtual Machine 系統管理者密碼
IT pro team 在提供 Azure 或是混合雲服務時,常常遇到有人詢問如何重新設定Microsoft Azure virtual machine的密碼。
如果忘記了 VM 管理者的密碼,有任何重新設定的機會嗎? 答案是有的,在最新 Microsoft Azure PowerShell module (版本0.7.4或更高版本)的說明中,提供了一個簡單的方法來解決這個問題! 接下來,我們將透過使用 Microsoft Azure PowerShell module,重置 Microsoft Azure VM上已經建置好的管理員使用憑證。
重置Microsoft Azure VM的管理者密碼
照著以下的步驟,我們可以透過 Windows PowerShell 和 Microsoft Azure PowerShell Module 來重新設定已經被建置在 Microsoft Azure VM上的 Windows Server 管理員憑證。
(注意! 進行以下的步驟前,請確認 Microsoft Azure VM 是可以透過遠端桌面順利連線成功的)
1. 如果你還沒有開通訂閱,請先申請免費的 Microsoft Azure 的帳號
2. 使用 Windows Server 平台上其中一個映像檔建立一個新的 VM
使用組件庫建立 VM 畫面
在建立 VM 的過程時,要確認你的 VM 是有安裝 VM 代理程式,因為之後的步驟都是利用這個VM代理程式做擴充,來重置已經建置好的管理者憑證,並且確保遠端桌面可以進入到VM裡面。
當使用Azure上所提供的映象檔建立VM時,可以在配置頁的最後一頁,選取安裝VM代理程式的選項 (預設時就已經選取打勾了)
安裝 VM 代理程式畫面
若是透過Window PowerShell 的New-AzureVM 和 New-AzureQuickVM 這兩個指令來建立新的Microsoft Azure VM時,同樣的也已經預設好要安裝VM代理程式。
目前的版本,VM 代理程式可以支援在自訂的作業系統組態或已經部屬好應用程式的 VM上進行四個擴充功能:
1. - BGInfo -在桌面背景上插入伺服器名稱、位址等資訊
2.- VM Access -啟用遠端桌面設定,並且重設內建管理員的管理者憑證
3.- Puppet Enterprise Agent -用來連接一個 Puppet Master server,並且接收配置
4.- Chef -用來連接一個 Chef server,並且接收配置,當你新建立的VM狀態顯示 為正在配置中時,請接續進行下一個步驟
3. 下載最新版的Microsoft Azure PowerShell Module
在之後的步驟,將需要使用到版本 0.7.4 或是更高版本的 PowerShell Module。若是先前已經安裝好 Microsoft Azure PowerShell Module,可以透過下列的 PowerShell 指令來確認目前安裝的版本為多少 :
Get-Module Azure
未來你可能想要將這個module安裝到PowerShell3.0或是PowerShell4.0的環境上。注意,當安裝完這個module後,需要重新啟動電腦,讓剩餘的片段程式碼完成運作。
4. 啟動Windows PowerShell ISE 並且執行下列的PowerShell cmdlets來連結你的Microsoft Azure帳戶
啟動Windows PowerShell ISE 畫面
Set-ExecutionPolicyRemoteSigned
Import-Module Azure
Add-AzureAccount
執行程式碼畫面
當登入提示出現後,輸入用來啟動Microsoft Azure 訂用的使用者帳號與密碼
輸入訂用的帳戶畫面
5. 在windows PowerShell ISE執行以下的PowerShell指令,藉此來確認你的Microsoft Azure訂用帳戶 ( 如果您有多個訂用 )
Get-AzureSubscription | Format-Table –Property SubscriptionName
確認訂用的帳戶名稱畫面
在下一個步驟中,我們將可以指定想要更改管理者帳號的VM所在的訂用帳戶。
6. 在windows PowerShell ISE執行以下的PowerShell cmdlet ,藉此來選擇你的Microsoft Azure訂用帳戶 ( 如果您有多個訂用 )
$subscription = “ENTER YOUR SUBSCRIPTION NAME HERE”
Select-AzureSubscription –Default $subscription
確認訂用的帳戶名稱畫面
7. 在windows PowerShell ISE執行以下的片段代碼,用來告知您所想要重置哪一個現有VM內的本地管理者使用者帳號
$adminCredentials = Get-Credential -Message "Enter new Admin credentials"
輸入要更改的帳號名稱畫面
- 輸入已經存在本地管理者的使用者名稱,則下列片段碼會利用輸入的密碼來重設帳號
- 輸入一個新的使用者名稱,則下列片段碼會重新命名現有本地管理者,並且去 匹配指定的使用者名稱
在輸入密碼的部分,需要符合密碼複雜度的要求,下列事項中,最少須遵守三個注意事項 :
1. 一個大寫字母
2. 一個小寫字母
3. 一個數字或一個特殊符號
(注意!,如果輸入密碼沒有遵守複雜度的需求,下列片段碼依然會執行成功,但是到了 VM重新開機之後,我們還是需要利用VM代理程式來申請新的密碼)
8. 在windows PowerShell ISE執行以下的片段代碼,用來重新設定選定的Azure VM的本地管理者憑證
(Get-AzureVM) |
Where-Object -Property Status -EQ "ReadyRole" |
Select-Object -Property Name, ServiceName |
Out-GridView -Title "Select a VM …" -PassThru |
ForEach-Object {
$VM = Get-AzureVM -Name $_.Name -ServiceName $_.ServiceName
If ($VM.VM.ProvisionGuestAgent) {
Set-AzureVMAccessExtension -VM $VM `
-UserName $adminCredentials.UserName `
-Password $adminCredentials.GetNetworkCredential().Password `
-ReferenceName "VMAccessAgent" |
Update-AzureVM
Restart-AzureVM -ServiceName $VM.ServiceName -Name $VM.Name
} else {
Write-Output "$($VM.Name): VM Agent Not Installed"
}
}
讓我們來一行一行看看上面片段碼的詳細資訊 :
首先,Get-AzureVM 將前幾個步驟中所選定的Azure訂用帳戶裡所有的VM列舉出來。因為我們只能夠重新設定正在執行中的VM的本地使用者憑證,因此我們透過 Where-Object filter將狀態在 ReadyRole 的VM列舉出來。
我們透過 Out-GridViewcmd let顯示過濾後的VM清單,這個指令會提示選取需要被重置的本地管理者憑證。最後,被選到的VM將透過管道傳遞到ForEach-Object block,並且使用 Set-AzureVMAceessExtensioncmdlet來重新設定每個被選取的本地管理者憑證。
這個區塊也會使用 Restart-AzureVMcmdlet 來重新啟動每一個被選取的VM
使得上述作的更動可以被處理完畢。
選擇 VM 之畫面
VM 更新且完成重新啟動畫面