从VSTS双跳凭据通过Azure的PowerShell脚本到PowerShell脚本目标VM(Dou

2019-09-26 03:27发布

我需要以域管理员对目标虚拟机自动执行脚本。 问题是,虚拟机没有公开。 我也因为它已被写入由团队成员不应该重写剧本,我宁愿提供我的团队,对他们的工作,是自动化,而不是每次都重写了剧本的解决方案。 当前进程看起来像THI

  1. VSTS启动与Azure的PowerShell脚本command1.ps1构建过程
  2. Command1.ps1安装Azure的自定义脚本扩展目标VM
  3. 自定义脚本扩展下载并执行运行command3.ps1以域管理员command2.ps1

我遇到的问题是我无法从VSTS传递凭据command2.ps1请推荐我,我应该怎样做正确。 选项,我发现:

  1. 不知道这是可能的VSTS https://blogs.technet.microsoft.com/ashleymcglone/2016/08/30/powershell-remoting-kerberos-double-hop-solved-securely/

  2. 添加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

Answer 1:

其实你不具备双跳问题,因为你是不是在节点上执行命令,你启动扩展,下载脚本并执行它。

所以,你需要做的是这样的:

Set-AzureRMVMCustomScriptExtension ... -Argument "-domainAdminName admin -domainAdminPassword passw0rD" -VM $Vm
$vm | Update-AzureVM

在您的脚本(调用内部的机器,所以command2.ps1)做:

$domainAdminPasswordSecureString = ConvertTo-SecureString -String $domainAdminPassword -AsPlainText -Force
$DomainCredentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $domainAdminName, $domainAdminPasswordSecureString

及相应的PARAMS粘贴到所述第二脚本(所以它接受那些)

此外,你不需要中间脚本,您可以下载"https://raw.githubusercontent.com/x/command2.ps1"和带参数执行它



文章来源: Double hopping credentials from VSTS through Azure PowerShell script to PowerShell script on target VM