Назад | Перейти на главную страницу

Локальный компьютер не может подключиться к только что созданной виртуальной машине Azure. Ошибка -… имя сервера не может быть разрешено

Стандартный отказ от ответственности, очень новый для удаленных машин PowerShell и Azure. Вот мой сценарий PowerShell. Не работает эта команда:

$ setupSession = New-PSSession -ComputerName $ pip -Port 5986 -Credential $ serviceCreds -UseSSL

вот мой сценарий.

# Variables for common values
$resourceGroup = "rgTest"
$location = "East US"
$vmName = "vmTest"
$SubscriptionName = "subscription test"
$StorageAccountName = "sanTest"
$NetworkSecurityGroupName  = "nsgTest"
$myNic = 'nicTest'
$MYvNET = 'vnetTest'
$myNetworkSecurityGroupRuleHTTP = 'nsgruleHTTPTest'
$myNetworkSecurityGroupRuleRDP = 'nsgruleRDPTest'
$myNetworkSecurityGroupRuleWWW = 'nsgruleWWWTest'
$myNetworkSecurityGroupRulePS = 'nsgrulePSTest'
$myNetworkSecurityGroup = 'nsgTest'
$rcgTest = 'rcgTest'

$secpasswd = ConvertTo-SecureString "password1" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential("test@user.org", $secpasswd)

Add-AzureRmAccount -Credential $cred
Login-AzureRmAccount -Credential $cred

Select-AzureRmSubscription -SubscriptionName $SubscriptionName
Get-AzureRmResourceGroup -Name $resourceGroup -ev notPresent -ea 0
if ($notPresent)
{
    New-AzureRmResourceGroup -Name $resourceGroup -Location $location
}

$subnetConfig = New-AzureRmVirtualNetworkSubnetConfig `
   -Name mySubnet `
   -AddressPrefix 192.168.1.0/24

New-AzureRmStorageAccount `
  -Location $Location `
  -ResourceGroupName $ResourceGroup `
  –StorageAccountName $StorageAccountName `
  -SkuName Standard_GRS `
  -SubscriptionName $SubscriptionName

$vnet = New-AzureRmVirtualNetwork `
  -ResourceGroupName $resourceGroup `
  -Location $location `
  -Name $MYvNET `
  -AddressPrefix 192.168.0.0/16 `
  -Subnet $subnetConfig

$pip = New-AzureRmPublicIpAddress ` 
   -ResourceGroupName $resourceGroup `
   -Location $location `
   -Name "mypublicdns$(Get-Random)" `
   -AllocationMethod Static `
   -IdleTimeoutInMinutes 4

$nsgRuleHTTP = New-AzureRmNetworkSecurityRuleConfig `
  -Name $myNetworkSecurityGroupRuleHTTP  `
  -Protocol Tcp `
  -Direction Inbound `
  -Priority 1000 `
  -SourceAddressPrefix * `
  -SourcePortRange * `
  -DestinationAddressPrefix * `
  -DestinationPortRange 80 `
  -Access Allow

$nsgRuleRDP = New-AzureRmNetworkSecurityRuleConfig `
   -Name $myNetworkSecurityGroupRuleRDP  `
   -Protocol Tcp `
   -Direction Inbound `
   -Priority 1100 `
   -SourceAddressPrefix * `
   -SourcePortRange * `
   -DestinationAddressPrefix * `
   -DestinationPortRange 3389 `
   -Access Allow

$nsgRulePS = New-AzureRmNetworkSecurityRuleConfig `
  -Name $myNetworkSecurityGroupRulePS  `
  -Protocol Tcp `
  -Direction Inbound `
  -Priority 1200 -SourceAddressPrefix * `
  -SourcePortRange * `
  -DestinationAddressPrefix * `
  -DestinationPortRange 5986 `
  -Access Allow

$nsg = New-AzureRmNetworkSecurityGroup `
  -ResourceGroupName $resourceGroup `
  -Location $location `
  -Name $myNetworkSecurityGroup `
  -SecurityRules $nsgRuleHTTP,$nsgRuleRDP

$nic = New-AzureRmNetworkInterface `
  -Name $myNic `
  -ResourceGroupName 

$resourceGroup 
   -Location $location `
   -SubnetId $vnet.Subnets[0].Id `
   -PublicIpAddressId $pip.Id `
   -NetworkSecurityGroupId $nsg.Id

$VMLocalAdminUser = "LocalAdminUser"
$VMLocalAdminSecurePassword = ConvertTo-SecureString "password1!" `
   -AsPlainText 
   -Force 

$Credential = New-Object System.Management.Automation.PSCredential ($VMLocalAdminUser, $VMLocalAdminSecurePassword); 

$vmConfig = New-AzureRmVMConfig -VMName $vmName -VMSize Standard_DS1_v2 | ` 
   Set-AzureRmVMOperatingSystem -Windows -ComputerName $vmName -Credential $Credential | `
   Set-AzureRmVMSourceImage -PublisherName MicrosoftWindowsServer -Offer WindowsServer -Skus 2016-Datacenter -Version latest | `
   Add-AzureRmVMNetworkInterface -Id $nic.Id 

New-AzureRmVM `
     -ResourceGroupName $resourceGroup `
     -Location $location `
     -VM $vmConfig

Get-AzureRmPublicIpAddress `
  -ResourceGroupName $resourceGroup | Select IpAddress

$PublicSettings = '{"commandToExecute":"powershell Add-WindowsFeature Web-Server"}'

Set-Item WSMan:\localhost\Client\TrustedHosts `
    -Value * #$pip.ToString() 

Enable-PSRemoting –Force

$serviceCreds = New-Object `
    -TypeName System.Management.Automation.PSCredential `
    -ArgumentList $VMLocalAdminUser, $VMLocalAdminSecurePassword

$setupSession = New-PSSession `
    -ComputerName $pip `
    -Port 5986 `
    -Credential $serviceCreds `
    -UseSSL

Remove-PSSession $setupSession

Я проверяю в своей лаборатории, в вашем сценарии есть некоторые ошибки в вашем сценарии. Вы не добавляете $nsgRulePS правила вашей NSG. Вам нужно изменить свой сценарий, как показано ниже:

$nsg = New-AzureRmNetworkSecurityGroup `
  -ResourceGroupName $resourceGroup `
  -Location $location `
  -Name $myNetworkSecurityGroup `
  -SecurityRules $nsgRuleHTTP,$nsgRuleRDP,$nsgRulePS

Я изменяю ваш скрипт, как показано ниже, у меня он работает.

# Variables for common values
$resourceGroup = "rgTest"
$location = "East US"
$vmName = "vmTest"
$SubscriptionName = "subscription test"
##storage account name is wrong  New-AzureRmStorageAccount : sanTest is not a valid storage account name. Storage account name must be between 3 and 24 characters in length and use numbers and lower-case letters only.
#$StorageAccountName = "sanTest"
$StorageAccountName = "shuitest12"
$NetworkSecurityGroupName  = "nsgTest"
$myNic = 'nicTest'
$MYvNET = 'vnetTest'
$myNetworkSecurityGroupRuleHTTP = 'nsgruleHTTPTest'
$myNetworkSecurityGroupRuleRDP = 'nsgruleRDPTest'
$myNetworkSecurityGroupRuleWWW = 'nsgruleWWWTest'
$myNetworkSecurityGroupRulePS = 'nsgrulePSTest'
$myNetworkSecurityGroup = 'nsgTest'
$rcgTest = 'rcgTest'

$secpasswd = ConvertTo-SecureString "password1" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential("test@user.org", $secpasswd)

Add-AzureRmAccount -Credential $cred
Login-AzureRmAccount -Credential $cred

Select-AzureRmSubscription -SubscriptionName $SubscriptionName
Get-AzureRmResourceGroup -Name $resourceGroup -ev notPresent -ea 0
if ($notPresent)
{
    New-AzureRmResourceGroup -Name $resourceGroup -Location $location
}

$subnetConfig = New-AzureRmVirtualNetworkSubnetConfig `
   -Name mySubnet `
   -AddressPrefix 192.168.1.0/24

New-AzureRmStorageAccount `
  -Location $Location `
  -ResourceGroupName $ResourceGroup `
  –StorageAccountName $StorageAccountName `
  -SkuName Standard_GRS 

$vnet = New-AzureRmVirtualNetwork `
  -ResourceGroupName $resourceGroup `
  -Location $location `
  -Name $MYvNET `
  -AddressPrefix 192.168.0.0/16 `
  -Subnet $subnetConfig

$pip = New-AzureRmPublicIpAddress -ResourceGroupName $resourceGroup `
   -Location $location `
   -Name "mypublicdns$(Get-Random)" `
   -AllocationMethod Static `
   -IdleTimeoutInMinutes 4

$nsgRuleHTTP = New-AzureRmNetworkSecurityRuleConfig `
  -Name $myNetworkSecurityGroupRuleHTTP  `
  -Protocol Tcp `
  -Direction Inbound `
  -Priority 1000 `
  -SourceAddressPrefix * `
  -SourcePortRange * `
  -DestinationAddressPrefix * `
  -DestinationPortRange 80 `
  -Access Allow

$nsgRuleRDP = New-AzureRmNetworkSecurityRuleConfig `
   -Name $myNetworkSecurityGroupRuleRDP  `
   -Protocol Tcp `
   -Direction Inbound `
   -Priority 1100 `
   -SourceAddressPrefix * `
   -SourcePortRange * `
   -DestinationAddressPrefix * `
   -DestinationPortRange 3389 `
   -Access Allow

$nsgRulePS = New-AzureRmNetworkSecurityRuleConfig `
  -Name $myNetworkSecurityGroupRulePS  `
  -Protocol Tcp `
  -Direction Inbound `
  -Priority 1200 -SourceAddressPrefix * `
  -SourcePortRange * `
  -DestinationAddressPrefix * `
  -DestinationPortRange 5986 `
  -Access Allow

$nsg = New-AzureRmNetworkSecurityGroup `
  -ResourceGroupName $resourceGroup `
  -Location $location `
  -Name $myNetworkSecurityGroup `
  -SecurityRules $nsgRuleHTTP,$nsgRuleRDP,$nsgRulePS

$nic = New-AzureRmNetworkInterface `
  -Name $myNic `
  -ResourceGroupName $resourceGroup `
   -Location $location `
   -SubnetId $vnet.Subnets[0].Id `
   -PublicIpAddressId $pip.Id `
   -NetworkSecurityGroupId $nsg.Id

##use name could not admin
$VMLocalAdminUser = "<your user name>"
$VMLocalAdminSecurePassword = ConvertTo-SecureString "<your password>" `
   -AsPlainText `
   -Force 

$Credential = New-Object System.Management.Automation.PSCredential ($VMLocalAdminUser, $VMLocalAdminSecurePassword); 

$vmConfig = New-AzureRmVMConfig -VMName $vmName -VMSize Standard_DS1_v2 | Set-AzureRmVMOperatingSystem -Windows -ComputerName $vmName -Credential $Credential | `
   Set-AzureRmVMSourceImage -PublisherName MicrosoftWindowsServer -Offer WindowsServer -Skus 2016-Datacenter -Version latest | `
   Add-AzureRmVMNetworkInterface -Id $nic.Id 

New-AzureRmVM `
     -ResourceGroupName $resourceGroup `
     -Location $location `
     -VM $vmConfig

Get-AzureRmPublicIpAddress `
  -ResourceGroupName $resourceGroup | Select IpAddress

Однако, когда виртуальная машина создана успешно, вы не можете winrm сервер напрямую. Вам необходимо проделать следующие шаги:

1. Откройте порт 5986 на вашей виртуальной машине Windows, вам нужен RDP для вашей виртуальной машины и установите его. Azure PowerShell не смог этого сделать.

2. Настройте winrm для прослушивания 5986, по умолчанию он прослушивает 5985. Вам также необходимо добавить сертификат на вашу виртуальную машину. Пожалуйста, обратитесь к этому ссылка на сайт.

Обновить:

Если вы хотите использовать WinRM-HTTP, а не HTTP, вам не нужно настраивать сертификат на виртуальной машине, вам нужен только открытый порт 5985 в брандмауэре Windows.

Примечания: вы должны открыть порт 5985 в Azure NSG.

Вы могли бы сделать это с Расширение пользовательского сценария, он выполняется при создании виртуальной машины. Просто ваш скрипт в виде файла ps.

New-NetFirewallRule -DisplayName "WinRM-HTTP- Allow Port 5985" -Direction Inbound -LocalPort 5985 -Protocol TCP -Action Allow

Вы можете загрузить сценарий в учетную запись хранения Azure или на github.

Подробнее об этом см. Здесь ссылка на сайт.

Насколько я понимаю, вы ни в коем случае не связываете свои NSG со своей подсетью. Вам нужно запустить что-то вроде этого

$vnet = Get-AzureRmVirtualNetwork -ResourceGroupName TestRG -Name TestVNet
Set-AzureRmVirtualNetworkSubnetConfig -VirtualNetwork $vnet -Name FrontEnd `
-AddressPrefix 192.168.1.0/24 -NetworkSecurityGroup $nsg

Также, если вы захотите взглянуть на шаблоны ARM, они делают это намного проще.