• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    使用 powershell 创建虚拟机

    在进行与 azure 相关的自动化过程中,创建虚拟主机是避不开的操作。由于系统本身的复杂性,很难用一两条简单的命令完成虚拟主机的创建。所以专门写一篇文章来记录使用 PowerShell 在 azure 上创建虚拟主机(Ubuntu 服务器)。
    虚拟主机虚拟主机需要与其他的一些基础性组件关联在一起才能提供可用的服务,这些组件包括:网卡、public IP 地址、虚拟网络、网络安全组、存储等。下图包含了新建一个虚机所需要的其他组件:

    也就是说在我们创建虚机的同时也要把这些组件一一的创建出来。

    定义变量

    我们希望今后可以重用这个脚本,所以把用到的变量全都放在一起便于修改或使用脚本的参数进行初始化:

    $rgName = "vmpool"
    $rgLocation = "East Asia"
    $subnetConfigName = $rgName + "subnet"
    $vnetName = $rgName + "vnet"
    $vmName = "vmxman"
    $pipName = $vmName + "pip"
    $nsgRule22Name = "nsgRule22"
    $nsgName = $rgName + "nsg"
    $interfaceName = $vmName + "nic"
    $storageName = $rgName + "storage"
    $storageType = "Standard_GRS"
    $oSDiskName = $vmName + "OSDisk"
    $vmSize = "Standard_D1"
    $vmVersion = "16.04-LTS"
    $userName = "nick"
    $userPassword = "123456"
    

    希望没有吓到你。没错!就是需要这么多的变量,这里先不解释,在后面用到一个说一个。

    创建登录虚机的凭据

    通过这个脚本创建的虚机默认会创建一个用户,你需要指定用户的名称和登录密码(我们的创建的用户通过公钥认证登录,这个密码并不真正使用)。通过用户名和密码创建凭据对象:

    $securePassword = ConvertTo-SecureString $userPassword -AsPlainText -Force
    $userCred = New-Object System.Management.Automation.PSCredential ($userName, $securePassword)
    

    创建 Resource Group

    创建一个新的 Resource Group,这个虚机及其所有相关的组件都归属于同一个 Resource Group:

    New-AzureRmResourceGroup -Name $rgName -Location $rgLocation
    
    在参数 Location 中指定 Resource Group 的位置为东亚(访问速度比较快)。

    创建虚拟网络

    接下来创建与虚拟网络。先创建一个子网的配置:

    $subnetConfig = New-AzureRmVirtualNetworkSubnetConfig -Name $subnetConfigName -AddressPrefix 192.168.1.0/24
    
    然后创建具有一个子网的虚拟网络:
    $vnet = New-AzureRmVirtualNetwork -ResourceGroupName $rgName -Location $rgLocation `
                     -Name $vnetName -AddressPrefix 192.168.0.0/16 -Subnet $subnetConfig
    
    最后为主机创建一个可以外网访问的 public IP:
    $pip = New-AzureRmPublicIpAddress -ResourceGroupName $rgName -Location $rgLocation `
                     -AllocationMethod Static -IdleTimeoutInMinutes 4 `
                     -Name $pipName
    
    创建网络安全组

    需要先配置一个允许访问 22 端口的规则:

    $nsgRule22 = New-AzureRmNetworkSecurityRuleConfig -Name $nsgRule22Name -Protocol Tcp `
      -Direction Inbound -Priority 200 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * `
      -DestinationPortRange 22 -Access Allow
    
    然后创建网络安全组:
    $nsg = New-AzureRmNetworkSecurityGroup -ResourceGroupName $rgName -Location $rgLocation `
      -Name $nsgName -SecurityRules $nsgRule22
    
    创建网络接口

    主机还缺一张网卡,所以为主机创建一个虚拟网卡:

    $nic = New-AzureRmNetworkInterface -Name $interfaceName -ResourceGroupName $rgName -Location $rgLocation `
      -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -NetworkSecurityGroupId $nsg.Id
    
    创建 Storage Account

    虚机的磁盘文件是以 blob 的形式存放在 azure 的存储中的,所以我们需要创建一个 StorageAccount 来存储磁盘文件:

    $storageAccount = New-AzureRmStorageAccount -ResourceGroupName $rgName -Name $storageName -Type $storageType -Location $rgLocation
    

    下面定义磁盘文件的存放位置和名称:

    $oSDiskUri = $storageAccount.PrimaryEndpoints.Blob.ToString() + "vhds/" + $oSDiskName + ".vhd"
    
    创建虚机

    下面创建虚机相关的配置:

    $vmConfig = New-AzureRmVMConfig -VMName $vmName -VMSize $vmSize | `
          Set-AzureRmVMOperatingSystem -Linux -ComputerName $vmName -Credential $userCred -DisablePasswordAuthentication | `
          Set-AzureRmVMSourceImage -PublisherName Canonical -Offer UbuntuServer -Skus $vmVersion -Version latest | `
          Add-AzureRmVMNetworkInterface -Id $nic.Id | `
          Set-AzureRmVMOSDisk -VhdUri $oSDiskUri -CreateOption FromImage
    
    我们创建的虚机操作系统为 Ubuntu Server 16.04-LTS,禁止使用用户名密码的方式登录。要让用户能够通过公钥的方式登录必须提供用户的公钥:
    $sshPublicKey = "nick's ssh public key"
    
    下面的命令会把你提供的公钥写入到用户的 authorized_keys 文件中:
    Add-AzureRmVMSshPublicKey -VM $vmconfig -KeyData $sshPublicKey -Path "/home/$userName/.ssh/authorized_keys"
    
    下面的命令真正的在 azure 上创建虚机:
    New-AzureRmVM -ResourceGroupName $rgName -Location $rgLocation -VM $vmConfig
    
    访问权限问题

    在 azure 上执行操作需要用户先进行登录,那么在 PowerShell 脚本中该如何做呢?
    笔者在《Azure 基础:用 PowerShell 自动登录》一文中有详细的介绍,有兴趣的朋友可以参考。

    您可能感兴趣的文章:
    • Powershell小技巧之设置IE代理
    • PowerShell基本使用教程
    • PowerShell 指令操作集合(小结)
    • 如何利用PowerShell监控Win-Server性能详解
    • PowerShell中Job相关命令及并行执行任务详解
    • PowerShell 脚本中的密码保存的方法
    • PowerShell 远程执行任务的方法步骤
    • 如何防范PowerShell代码注入漏洞绕过受限语言模式
    • 自动设置安卓手机wifi代理的PowerShell脚本
    上一篇:如何防范PowerShell代码注入漏洞绕过受限语言模式
    下一篇:添加powershell脚本来解决nuget打包文件丢失问题
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    使用 powershell 创建虚拟机 使用,powershell,创建,虚拟机,