如何判断AMI是Ubuntu还是Amazon Linux



我需要一种方法来自动找出实例的SSH用户名。它需要知道AMI是Amazon Linux还是Ubuntu(适用于Amazon Linux的ec2-user@与Ubuntu映像上的ubuntu@(

有人可以看到获取此信息的方法吗?

我一直在使用image.root_device_name它似乎在 Amazon Linux /dev/sda1 Ubuntu 上/dev/xvda,但我想知道这有多可靠以及是否有替代方法。

您可以从

以下位置获取 ImageId:

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

然后在 ec2.describe_images(ImageIds=[ImageId1,ImageId2]) 中使用 ImageId

正如Shivam提到的,您可以从"描述图像"API调用中的描述中获取操作系统。如果它不包含在此处,那么您可能不得不恢复到在/dev/xvda1/dev/sda1之间进行检查。您可以使用以下内容传入实例 ID 并使用 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
}

您可以通过将实例 id 作为参数传递来运行 shell 函数,例如 get_username i-xxxxxxxxx

相关内容

最新更新