如何在不通过 RDP 登录的情况下查看 ec2 实例的 Windows 计算机名称?

如何在不通过 RDP 登录的情况下查看 ec2 实例的 Windows 计算机名称?

这似乎很简单,但我在控制台中没有看到它,也没有注意到“describe-instances”中有任何内容。鉴于一些警报电子邮件与机器名称相关联,快速找出它是哪个实例将是最有帮助的。某种将所有实例名称到机器名称映射的列表转储到我的帐户将是理想的选择。

更新:我尝试打开另一个 EC2 主机 135-139 的端口,看看是否可以使用 NetBios 获取名称。我运行了:

ping -a <ip>
nbtstat -a <ip>

两者都未返回远程 IP 的机器名称。对于本地 IP,两者都返回了机器名称。

答案1

我们也遇到了同样的问题。我们每天都会从 CloudFormation 自动构建大量 EC2 实例,需要一种方法来根据主机名在控制台中轻松单独识别它们。

目前所有自动构建的服务器都有相同的名称,该名称是云形成模板中的固定字符串。

我们已经有了一个基于“用户数据”的引导机制,通过该机制自动创建的实例将在首次启动时运行一些 PowerShell 代码。

因此,为了让主机名显示在 AWS 控制台中,我认为最简单的方法是更改​​“名称”标签,将主机名附加到现有标签。

我在引导程序中添加了以下代码:

function Get-NameTagValue()
{

    param(
        [parameter(Mandatory)] [string] $InstanceId
    )


$filter1 = New-Object -TypeName Amazon.EC2.Model.Filter -Property @{
    Name   = 'resource-id'
    Values = $InstanceId
}

$filter2 = New-Object -TypeName Amazon.EC2.Model.Filter -Property @{
    Name   = 'key'
    Values = 'Name'
}


$filters = $filter1, $filter2
$tag = Get-EC2Tag `
        -Region $Region `
        -ProfileName $ProfileName `
        -Filter $filters
#Output the tag value
$tag.Value

}

function Set-InstanceNameTag()
{
    $instanceId = (Invoke-RestMethod -Method Get -Uri http://169.254.169.254/latest/meta-data/instance-id)

    #Get the current value of the name tag
    $currentNameTagValue = Get-NameTagValue -InstanceId $instanceId
    $newNameTagValue = "$currentNameTagValue - $env:COMPUTERNAME"

    Remove-EC2Tag `
        -Resource $instanceId `
        -Tag @{ Key="Name" } `
        -Region $Region `
        -ProfileName $ProfileName `
        -Force

    New-EC2Tag `
        -Resource $instanceId `
        -Tag @{ Key="Name"; Value=$newNameTagValue } `
        -Region $Region `
        -ProfileName $ProfileName `

}

代码首先从元数据中获取 isnance id,然后使用此 id 找到现有的名称标签,将其删除,并添加一个包含现有值和主机名的新名称标签。

这两个函数包含在我们的 Bootstrap 脚本中,该脚本具有函数中使用的$Region和的参数。$ProfileName

然后,我们只需从主脚本调用该函数Set-InstanceNameTag,瞧,您就会得到现有的名称标签,后跟连字符和主机名。

为了实现这一点,EC2 实例需要具有以下权限的角色:CreateTags、DeleteTags 和 DescribeTags。

您可以使用以下策略实现此目的:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:CreateTags",
                "ec2:DeleteTags",
                "ec2:DescribeTags"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

希望这对某人有帮助。

卡尔

答案2

了解机器名称的最佳方法是在机器上运行相关命令(命令行中的“主机名”)。

您可以运行一个脚本,循环遍历您账户中的实例,并对每个实例运行远程命令以获取其主机名。然后,您可以为每个实例添加一个带有其实际主机名的标签。(使用 create-tags 命令:http://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/ApiReference-cmd-CreateTags.html

如果您有远程计算机的密码,则可以使用 powershell 远程执行命令。使用 powershell 远程执行的说明可在此处找到:https://stackoverflow.com/questions/10237083/how-to-programmatically-remotely-execute-a-program-in-ec2-windows-instance/13284313#13284313

相关内容