我需要从使用AWS CLI扩展服务器到将ssh
整合到一个脚本中。我可以将实例ID加载到变量中,但我需要对其进行重新格式化以将其推送到AWS以获取公共IP。
#!/bin/bash
azid=`(hidden for obvious reasons)`
azpswd=`(hidden for obvious reasons)`
hostip=`curl http://icanhazip.com`
COUNTER=120
#make a file to hold json information
touch instance.txt
#login to azure requireing webpage (not needed on cloud9)
#az login -u $azid -p $azpswd
#make a key pair and add to a variable (only needed one time)
#mykey=`aws ec2 create-key-pair --key-name MyKeyPair`
#open ports on security group only needed one time
#aws ec2 authorize-security-group-ingress --group-id sg-################# --protocol tcp --port 22 --cidr $hostip/32
#aws ec2 authorize-security-group-ingress --group-id sg-################# --protocol tcp --port 80 --cidr 0.0.0.0/0
#aws ec2 authorize-security-group-ingress --group-id sg-################# --protocol tcp --port 8080 --cidr 0.0.0.0/0
#aws ec2 authorize-security-group-ingress --group-id sg-################# --protocol tcp --port 32400 --cidr 0.0.0.0/0
#launch instance and add ouptut to variable
aws ec2 run-instances --image-id ami-024a64a6685d05041 --count 1 --instance-type t2.micro --key-name MyKeyPair --security-group-ids sg-################# --subnet-id subnet-################# > instance.txt
#pull instance id from instance.txt
inid=`grep "InstanceId" instance.txt`
#testing
echo $inid
#wait for vm to spin up
for ((i=COUNTER; i>=1; i--))
do sleep 1
echo $i
done
#get public ip from instance id
inip=`aws ec2 describe-instances --instance-ids $inid | grep PublicIpAddress`
#test
echo $inip
#ssh into freshly spun up server
ssh -i 'MyKeyPair.pem' ubuntu@$inip
从json文件中提取实例ID,然后将其重新格式化以与aws ec2 describe-instances
配合使用,然后在服务器启动后拉下公共IP。然后,将所有ssh插入其中并推送kickstart文件,以便新启动的服务器将在docker中运行plex。
答案 0 :(得分:2)
如果您希望在
请参阅:Running Commands on Your Linux Instance at Launch - Amazon Elastic Compute Cloud
该脚本将以root
的身份运行。要调试脚本,请查看:
/var/log/cloud-init-output.log
所有AWS用户都使用此技术,并且比您尝试实现的方法可靠得多。