无法连接到使用 Azure Powershell 创建的 Azure 虚拟机
Unable to connect to Azure Virtual Machine created with Azure Powershell
我通过 https://portal.azure.com/ 用户界面成功创建了 Azure 虚拟机。我开始使用 Azure Powershell 脚本来自动创建类似的 VM,并以下面的函数结束:
function Create-CentOSVirtualMachine
{
Set-AzureSubscription -SubscriptionName Pay-As-You-Go -CurrentStorageAccount "thefoobar"
Write-Output "Searching for the latest CentOS image..."
$image = (Get-AzureVMImage | Where-Object { $_.Label -like "*CentOS*" } | select -last 1)
$imageName = $image.ImageName
$imageLabel = $image.Label
$dataDiskSizeInGB = 30
$diskLabel = "thefoobar-data"
$mediaOsLocation = "https://thefoobar.blob.core.windows.net/vhds/thefoobar-os.vhd"
$mediaDataLocation = "https://thefoobar.blob.core.windows.net/vhds/thefoobar-data.vhd"
Write-Output "Creating CentOS virtual machine from:" $imageLabel
$user = "thefoobardev"
$password = "thefoobarpassword"
$vmConfig = New-AzureVMConfig -Name "thefoobar" -MediaLocation $mediaOsLocation -InstanceSize Basic_A1 -ImageName $imageName
$vm = $vmConfig | Add-AzureProvisioningConfig -Linux -LinuxUser $user -Password $password | Add-AzureDataDisk -CreateNew -DiskSizeInGB $dataDiskSizeInGB -DiskLabel $diskLabel -LUN 0 -MediaLocation $mediaDataLocation
$vm | Add-AzureEndpoint -Name 'ElasticSearchHTTP' -LocalPort 9200 -PublicPort 9200 -Protocol tcp
$vm | Add-AzureEndpoint -Name 'ElasticSearchTransport' -LocalPort 9300 -PublicPort 9300 -Protocol tcp
$vm | Set-AzureEndpoint -Name 'SSH' -LocalPort 22 -PublicPort 22 -Protocol tcp
New-AzureVM -ServiceName "thefoobar" -VNetName "MyFoobarNetwork" -VMs $vm -Location "East US"
}
对我来说,它似乎与我通过用户界面执行的操作相匹配(尽管对于这个 public 问题,我将脚本中的一些字符串重命名为 "foobar")。脚本运行没有任何错误,仪表板似乎完全按照我的预期显示我的 VM。
但是,创建脚本后,我无法通过 PuTTY 连接:
这通常是我在通过 GUI 创建 VM 后连接时需要填写的全部内容。使用我的脚本可以连接,但在输入用户后显示错误:
这是我通过门户输入安全详细信息的方式 UI:
从门户创建时,我会在 PuTTYing 时被要求输入用户密码。我的 Powershell 脚本中是否缺少任何可以帮助我在从门户创建 VM 时能够连接的东西?
我尝试使用 https://msdn.microsoft.com/en-us/library/azure/dn495299.aspx 中显示的一些额外 Linux 参数。
如果我添加 -NoSSHEndpoint
或 -DisableSSH
,这只会以类似的方式创建我的 VM,但 SSH 的端点会少一个。如果我手动添加端点,我仍然会收到相同的错误消息。如果我添加 -NoSSHPassword
,我会得到错误 New-AzureVM : BadRequest: The UserPassword property must be specified.
我现有代码片段中的以下行 returns RightImage 的图像 0b11de9248dd4d87b18621318e037d37__RightImage-CentOS-7.0-x64-v14.2
。
$image = (Get-AzureVMImage | Where-Object { $_.Label -like "*CentOS*" } | select -last 1)
我通过 OpenLogic 尝试了一个不同的 CentOS 映像,并且我现有的 PowerShell 脚本有效:
Get-AzureVMImage | Where-Object { $_.ImageName -like "*OpenLogic-CentOS*" } | select -last 1
它给了我图像 5112500ae3b842c8b9c604889f8753c3__OpenLogic-CentOS-70-20150128
。
不确定是什么特别阻止了 RightImage 图像允许远程连接。
我通过 https://portal.azure.com/ 用户界面成功创建了 Azure 虚拟机。我开始使用 Azure Powershell 脚本来自动创建类似的 VM,并以下面的函数结束:
function Create-CentOSVirtualMachine
{
Set-AzureSubscription -SubscriptionName Pay-As-You-Go -CurrentStorageAccount "thefoobar"
Write-Output "Searching for the latest CentOS image..."
$image = (Get-AzureVMImage | Where-Object { $_.Label -like "*CentOS*" } | select -last 1)
$imageName = $image.ImageName
$imageLabel = $image.Label
$dataDiskSizeInGB = 30
$diskLabel = "thefoobar-data"
$mediaOsLocation = "https://thefoobar.blob.core.windows.net/vhds/thefoobar-os.vhd"
$mediaDataLocation = "https://thefoobar.blob.core.windows.net/vhds/thefoobar-data.vhd"
Write-Output "Creating CentOS virtual machine from:" $imageLabel
$user = "thefoobardev"
$password = "thefoobarpassword"
$vmConfig = New-AzureVMConfig -Name "thefoobar" -MediaLocation $mediaOsLocation -InstanceSize Basic_A1 -ImageName $imageName
$vm = $vmConfig | Add-AzureProvisioningConfig -Linux -LinuxUser $user -Password $password | Add-AzureDataDisk -CreateNew -DiskSizeInGB $dataDiskSizeInGB -DiskLabel $diskLabel -LUN 0 -MediaLocation $mediaDataLocation
$vm | Add-AzureEndpoint -Name 'ElasticSearchHTTP' -LocalPort 9200 -PublicPort 9200 -Protocol tcp
$vm | Add-AzureEndpoint -Name 'ElasticSearchTransport' -LocalPort 9300 -PublicPort 9300 -Protocol tcp
$vm | Set-AzureEndpoint -Name 'SSH' -LocalPort 22 -PublicPort 22 -Protocol tcp
New-AzureVM -ServiceName "thefoobar" -VNetName "MyFoobarNetwork" -VMs $vm -Location "East US"
}
对我来说,它似乎与我通过用户界面执行的操作相匹配(尽管对于这个 public 问题,我将脚本中的一些字符串重命名为 "foobar")。脚本运行没有任何错误,仪表板似乎完全按照我的预期显示我的 VM。
但是,创建脚本后,我无法通过 PuTTY 连接:
这通常是我在通过 GUI 创建 VM 后连接时需要填写的全部内容。使用我的脚本可以连接,但在输入用户后显示错误:
这是我通过门户输入安全详细信息的方式 UI:
从门户创建时,我会在 PuTTYing 时被要求输入用户密码。我的 Powershell 脚本中是否缺少任何可以帮助我在从门户创建 VM 时能够连接的东西?
我尝试使用 https://msdn.microsoft.com/en-us/library/azure/dn495299.aspx 中显示的一些额外 Linux 参数。
如果我添加 -NoSSHEndpoint
或 -DisableSSH
,这只会以类似的方式创建我的 VM,但 SSH 的端点会少一个。如果我手动添加端点,我仍然会收到相同的错误消息。如果我添加 -NoSSHPassword
,我会得到错误 New-AzureVM : BadRequest: The UserPassword property must be specified.
我现有代码片段中的以下行 returns RightImage 的图像 0b11de9248dd4d87b18621318e037d37__RightImage-CentOS-7.0-x64-v14.2
。
$image = (Get-AzureVMImage | Where-Object { $_.Label -like "*CentOS*" } | select -last 1)
我通过 OpenLogic 尝试了一个不同的 CentOS 映像,并且我现有的 PowerShell 脚本有效:
Get-AzureVMImage | Where-Object { $_.ImageName -like "*OpenLogic-CentOS*" } | select -last 1
它给了我图像 5112500ae3b842c8b9c604889f8753c3__OpenLogic-CentOS-70-20150128
。
不确定是什么特别阻止了 RightImage 图像允许远程连接。