如何修改EC2实例创建脚本,让他人使用自有密钥执行?
解决EC2实例创建脚本适配自定义密钥的问题
核心问题
你的脚本里硬编码了固定的密钥对名称(it-step-testvm-secretkey),这导致只有使用这个密钥对的用户才能正常连接实例,其他用户的自有密钥无法适配。
修改方案
方案1:让用户手动输入密钥对名称
修改脚本,在执行创建命令前提示用户输入自己的密钥对名称,替换硬编码的值:
# 获取user-data内容 user_data_content=$(curl -fsSL -H "Authorization: token github_pat_11A4D3V6Y08fJxiucugdFE_M5UIeyoOskP18fydBFeUDvg1gqqJ201ARgaVztGinCkAKJHWL*****" https://raw.githubusercontent.com/Mr-Marshal1/hometask2/master/user-data-script.sh) user_data_base64=$(echo -n "$user_data_content" | base64 -w 0) # 提示用户输入密钥对名称 read -p "请输入你的EC2密钥对名称:" user_key_name # 创建实例时使用用户输入的密钥对 aws ec2 run-instances --image-id ami-01bc990364452ab3e --instance-type t2.micro --user-data $user_data_base64 --key-name "$user_key_name" --security-group-ids sg-0ad3a9d1ae0f84008
方案2:通过命令行参数传递密钥对名称
把密钥对名称作为脚本参数传入,更适合自动化场景:
# 检查是否传入密钥对名称参数 if [ $# -ne 1 ]; then echo "用法: $0 <你的EC2密钥对名称>" exit 1 fi user_key_name=$1 # 获取user-data内容 user_data_content=$(curl -fsSL -H "Authorization: token github_pat_11A4D3V6Y08fJxiucugdFE_M5UIeyoOskP18fydBFeUDvg1gqqJ201ARgaVztGinCkAKJHWL*****" https://raw.githubusercontent.com/Mr-Marshal1/hometask2/master/user-data-script.sh) user_data_base64=$(echo -n "$user_data_content" | base64 -w 0) # 创建实例时使用传入的密钥对 aws ec2 run-instances --image-id ami-01bc990364452ab3e --instance-type t2.micro --user-data $user_data_base64 --key-name "$user_key_name" --security-group-ids sg-0ad3a9d1ae0f84008
使用时直接运行:./your-script.sh 你的密钥对名称
额外注意事项
- 用户必须确保自己的密钥对已存在于当前AWS区域,否则会报错
- 若需跨区域创建实例,需添加
--region参数指定目标区域
内容的提问来源于stack exchange,提问作者Mr.Marshal
相关产品推荐
相关产品推荐

