Как определить, является ли AMI Ubuntu или Amazon Linux? - PullRequest
0 голосов
/ 09 июля 2019

Мне нужен способ автоматического определения имени пользователя SSH для экземпляра.Требуется знать, является ли AMI Amazon Linux или Ubuntu (ec2-user @ для Amazon Linux против ubuntu @ на изображениях Ubuntu)

Может кто-нибудь увидеть способ получить эту информацию?

У меня естьиспользовал image.root_device_name, который, похоже, /dev/xvda в Amazon Linux /dev/sda1 в Ubuntu, но мне интересно, насколько это надежно и есть ли альтернативный способ.

Ответы [ 2 ]

0 голосов
/ 09 июля 2019

Как упомянул Шивам, вы можете получить операционную систему из описания внутри API-вызова «Describe Images». Если он не содержится здесь, вам, вероятно, придется вернуться к проверке между /dev/xvda1 и /dev/sda1. Вы можете использовать ниже, чтобы передать идентификатор экземпляра и получить имя пользователя, используя boto3

import boto3

ec2=boto3.client('ec2')

instance_id = 'i-0defb5cd304ca2d7a'

def find_username(instance_id):
    image_id = ec2.describe_instances(InstanceIds=[instance_id])["Reservations"][0]['Instances'][0]['ImageId']
    image_type = ec2.describe_images(ImageIds=[image_id])['Images'][0]['Description']
    elif 'Amazon Linux' in image_type:
        return 'Username is ec2-user'
    elif 'Ubuntu' in image_type:
        return 'Username is ubuntu'
    else:
        return 'OS is not Amazon Linux or Ubuntu'

или используя aws cli (в сочетании с jq)

get_username () {
    IMAGE_ID=$(aws ec2 describe-instances --instance-ids $1 | jq -r '.Reservations[].Instances[].ImageId');
    IMAGE_TYPE=$(aws ec2 describe-images --image-ids $IMAGE_ID | jq '.Images[].Description');
    if [[ $IMAGE_TYPE == *"Amazon Linux"* ]]; then
        echo "Username is ec2-user"
    elif [[ $IMAGE_TYPE == *"Ubuntu"* ]]; then
        echo "Username is ubuntu"
    else ;
        echo "OS is not Amazon Linux or Ubuntu"
    fi
}

Вы можете запустить функцию оболочки, просто передав идентификатор экземпляра в виде аргумента, например, get_username i-xxxxxxxxx

0 голосов
/ 09 июля 2019

Вы можете получить ImageId от:

ec2=boto3.client('ec2') ec2.describe_instances()

Затем используйте ImageId в ec2.describe_images(ImageIds=[ImageId1,ImageId2])

...