Como posso ver o nome do computador Windows para uma instância ec2 sem efetuar login via RDP?

1

Parece que isso deve ser simples, mas não vejo isso no console nem notei nada em "describe-instances" para isso. Dados alguns e-mails de alerta estão ficando vinculados ao nome da máquina, descobrindo rapidamente qual instância ela é mais útil. Alguma maneira de despejar uma lista de todos os nomes de instâncias nos mapeamentos de nomes de máquinas para minha conta seria ideal.

UPDATE: Eu tentei abrir as portas de outro host do EC2 135-139 para ver se eu posso usar o NetBios para obter o nome. Eu corri:

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

Nenhum dos dois retornou o nome da máquina para o ip remoto. Com o IP local, ambos fazem.

    
por ss2k 27.09.2014 / 14:02

2 respostas

3

Tivemos o mesmo problema. Construímos muitas instâncias do EC2 a partir do CloudFormation automaticamente todos os dias e precisávamos de uma maneira de identificá-las facilmente no console com base em seu hosthame.

Atualmente, todos os servidores criados automaticamente têm o mesmo nome, que é uma string fixa no modelo de formação de nuvem.

Já dispúnhamos de um mecanismo de cintagem de inicialização baseado em "dados do usuário", em que as instâncias criadas automaticamente executavam algum código do PowerShell quando eram inicializadas pela primeira vez.

Portanto, para obter o nome do host no console da AWS, percebi que a maneira mais fácil era alterar a tag "name", anexando o nome do host à tag existente.

Eu adicionei o seguinte código ao bootstrap:

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 '

}

O código primeiro obtém o id de isnance dos metadados e, em seguida, usando esse id, ele encontra a tag Name existente, remove-a e adiciona uma nova tag Name contendo o valor existente seguido pelo nome do host.

Essas duas funções estão contidas em nosso script Bootstrap, que possui parâmetros para $Region e $ProfileName , que são usados nas funções.

Em seguida, chamamos a função Set-InstanceNameTag do script principal e voilà, você tem a tag Name existente seguida por um hífen e o nome do host.

Para que isso funcione, a instância do EC2 precisa ter uma função que tenha permissões para: CreateTags, DeleteTags e DescribeTags.

Você pode conseguir isso usando a seguinte política:

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

Espero que ajude alguém.

Carl

    
por 19.11.2015 / 11:25
2

A melhor maneira de saber o nome da máquina é executar o comando relevante na máquina ('hostname' na linha de comando).

Você pode executar um script que faça um loop sobre as instâncias de sua conta e execute um comando remoto para cada nome para obter seu nome de host. Você pode adicionar uma tag a cada uma das instâncias com seu nome de host real. (Usando o comando create-tags: link )

Você pode executar o comando remotamente usando o powershell se tiver a senha da máquina remota. Instruções para execução remota com PowerShell estão disponíveis aqui: link

    
por 28.09.2014 / 15:03