一千萬個為什麽

搜索

如何通過AWS CLI查找使用的密鑰對名稱?



我知道 get-password-data 命令可以顯示PasswordData數據,如:

$ aws ec2 get-password-data --instance-id i-0123456789
{
    "InstanceId": "i-0123456789",
    "PasswordData": "\r\nAOh...xg==\r\n",
    "Timestamp": "2018-03-27T16:52:04.000Z"
}

但我想知道哪個密鑰對名稱用於啟動實例,所以我可以使用 - priv-launch-key 傳遞它以解密密碼。

轉載註明原文: 如何通過AWS CLI查找使用的密鑰對名稱?

一共有 2 個回答:

對於給定的實例,您將首先使用 aws ec2 describe-instances 來獲取實例的信息JSON。

該信息還包含用於創建該實例的密鑰對名稱。

例如。對於實例 i-0e2x8xd7xxx (註意:我使用了很棒的工具 jq 來進行JSON解析,但是你可以使用任何其他解決方案)

aws ec2 describe-instances --instance-ids i-0e2x8xd7xxx | jq '.Reservations[].Instances[].KeyName'

輸出:

"my_key_name"

您可以將其存儲在變量中,例如 $ keypair_name ,然後將其傳遞到 aws ec2 get-password-data 命令中。

您還需要傳遞您的密鑰對所在的計算機上的路徑,例如: <�代碼> $ keypair_path </代碼>。

例如:

aws ec2 get-password-data --priv-launch-key $keypair_path/$keypair_name .....

基於 @Vish回答,我創建了以下shell腳本:

#/usr/bin/env bash
# Script to show password data of the EC2 instance.
[ $# -eq 0 ] && { echo "用法: $0 instance_id ..."; exit; }
keyname=$(aws ec2 describe-instances --query 'Reservations[].Instances[].KeyName' --output text --instance-ids $1)
pemfile=$(find ~/.ssh -name "*$keyname*.pem" -print -quit)
if [ -z "$pemfile" ]; then
  aws ec2 get-password-data --instance-id $1
else
  aws ec2 get-password-data --instance-id $1 --priv-launch-key $pemfile
fi

其目的是根據密鑰對名稱解密密碼。默認情況下,它在用戶的〜/ .ssh 文件夾中查找PEM文件。

用法:

./show_ec2_password_data.sh i-instance_id