我需要以域管理員的身份自動執行目標VM上的腳本。問題是,虛擬機沒有公開。我也不應該重寫腳本,因爲它是由團隊成員編寫的,我寧願爲我的團隊提供適用於他們的解決方案,並且是自動化的,而不是每次都重寫它們的腳本。 當前進程看起來像THI從VSTS通過Azure PowerShell腳本到目標VM上的PowerShell腳本的雙跳憑證
- VSTS啓動與Azure的PowerShell腳本command1.ps1構建過程
- Command1.ps1目標安裝Azure的自定義腳本擴展VM
- 自定義腳本擴展下載並執行命令2名爲.ps1運行command3.ps1以域管理員
我遇到的問題是我無法從VSTS憑據傳遞到command2.ps1 請推薦我,我應該怎麼辦次妥善處理。 的選項,我發現:如果
不知道這是可能的VSTS https://blogs.technet.microsoft.com/ashleymcglone/2016/08/30/powershell-remoting-kerberos-double-hop-solved-securely/
添加IP公網地址到目標VM,配置WinRM的,執行command2.ps1,刪除公網IP地址
我確定有這樣做的更好的方法。 command1.ps1:
param
(
[Parameter(Mandatory)]
[String]$resourceGroupName,
[Parameter(Mandatory)]
[String]$targetVMname,
[Parameter(Mandatory)]
[String]$vmLocation,
[Parameter(Mandatory)]
[String]$FileUri,
[Parameter(Mandatory)]
[String]$nameOfTheScriptToRun,
[Parameter(Mandatory)]
[String]$customScriptExtensionName,
[Parameter(Mandatory)]
[String]$domainAdminName,
[Parameter(Mandatory)]
[String]$domainAdminPassword
)
$domainAdminPasswordSecureString = ConvertTo-SecureString -String $domainAdminPassword -AsPlainText -Force
$DomainCredentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $domainAdminName, $domainAdminPasswordSecureString
Set-AzureRmVMCustomScriptExtension -Argument "-DomainCredentials $DomainCredentials" `
-ResourceGroupName $resourceGroupName `
-VMName $targetVMname `
-Location $vmLocation `
-FileUri $FileUri `
-Run $nameOfTheScriptToRun `
-Name $customScriptExtensionName
Remove-AzureRmVMCustomScriptExtension -Force `
-ResourceGroupName $resourceGroupName `
-VMName $targetVMname `
-Name $customScriptExtensionName
command2.ps1:
param
(
[Parameter(Mandatory)]
[System.Management.Automation.PSCredential]$DomainCredentials
)
$url = "https://raw.githubusercontent.com/x/command2.ps1"
$output = "C:\command2.ps1"
Invoke-WebRequest -Uri $url -OutFile $output
Start-Process -FilePath powershell.exe -ArgumentList $output -Credential $DomainCredentials
您是否打算通過Azure自定義擴展從VSTS傳遞純文本密碼?我不認爲這是個好主意。密碼在C:\ Packages \ Plugins \ Microsoft.Compute.CustomScriptExtension \ 1.9 \ RuntimeSettings \ 0.settings – WinBoss
中顯示爲純文本,之後您將刪除擴展名,所以並不重要。那個地方會被清理乾淨。或者你可以使用受保護的設置,執行的命令將被編碼。 https://docs.microsoft.com/en-us/azure/virtual-machines/windows/extensions-customscript – 4c74356b41
使用PowerShell傳遞受保護設置的任何方式?如果不是,你會怎麼做?你覺得安全通過密碼作爲簡單的字符串? – WinBoss