├── README.md └── change-lightsail-ip.sh /README.md: -------------------------------------------------------------------------------- 1 | # 说明 2 | 脚本需在墙内机器运行,并且运行机器上必须配置好 aws cli 环境,自动检测指定区域所有静态ip的连通性,如果不通,则删除当前静态ip,并新建静态ip绑定至实例。 3 | 4 | 5 | --- 6 | 依赖jq 7 | 8 | https://github.com/stedolan/jq 9 | 10 | 11 | 安装jq 12 | ```bash 13 | wget http://stedolan.github.io/jq/download/linux64/jq -O /usr/local/bin/jq 14 | chmod +x /usr/local/bin/jq 15 | ``` 16 | 17 | --- 18 | 19 | # 使用方法 20 | 21 | 下载脚本 22 | 23 | ``` 24 | wget https://raw.githubusercontent.com/angelsky11/change-lightsail-ip/master/change-lightsail-ip.sh 25 | ``` 26 | 27 | 运行 28 | 29 | ```bash 30 | chmod +x change-lightsail-ip.sh 31 | ./change-lightsail-ip.sh YOUR_REGION 32 | ``` 33 | YOUR_REGION请参考下表替换修改 34 | | 地区 | 地区码 | 35 | | --- | --- | 36 | |美国东部(俄亥俄)| us-east-2 | 37 | |美国东部(弗吉尼亚北部)| us-east-1 | 38 | |美国西部(俄勒冈)| us-west-2 | 39 | |亚太地区(孟买)| ap-south-1 | 40 | |亚太地区(首尔)| ap-northeast-2 | 41 | |亚太地区(新加坡)| ap-southeast-1 | 42 | |亚太地区(悉尼)| ap-southeast-2 | 43 | |亚太地区 (东京) | ap-northeast-1 | 44 | |加拿大(中部)| ca-central-1 | 45 | |欧洲(法兰克福)| eu-central-1 | 46 | |欧洲 (爱尔兰) | eu-west-1 | 47 | |欧洲(伦敦)| eu-west-2 | 48 | |欧洲(巴黎)| eu-west-3 | 49 | 50 | 51 | 52 | 可添加定时任务每10分钟检测一次 53 | 54 | 55 | 运行`crontab -e`后添加下面一行: 56 | ``` 57 | */10 * * * * /YOUR_PATH/change-lightsail-ip.sh YOUR_REGION 58 | ``` 59 | 如果不想10分钟一次请自行搜索crontab用法 60 | 61 | 62 | # server酱微信消息推送 63 | 64 | https://sc.ftqq.com 65 | 66 | 67 | 修改以下两个参数 68 | ```bash 69 | #server酱开关,0为关闭,1为开启 70 | NOTIFICATION=0 71 | #server酱api 72 | SERVERCHAN_KEY='YOUR_SERVERCHAN_API' 73 | ``` 74 | 75 | --- 76 | 77 | 如有使用问题请先搜索后发信息 https://t.me/angelsky11 78 | -------------------------------------------------------------------------------- /change-lightsail-ip.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #server酱开关,0为关闭,1为开启 4 | NOTIFICATION=0 5 | #server酱api 6 | SERVERCHAN_KEY='YOUR_SERVERCHAN_KEY' 7 | 8 | REGION=$1 9 | #ping检测的次数 10 | PINGTIMES=30 11 | 12 | readonly NOTIFICATION 13 | readonly SERVERCHAN_KEY 14 | readonly REGION 15 | readonly PINGTIMES 16 | 17 | case $(uname) in 18 | "Darwin") 19 | # Mac OS X 操作系统 20 | CHECK_PING="100.0% packet loss" 21 | ;; 22 | "Linux") 23 | # GNU/Linux操作系统 24 | CHECK_PING="100% packet loss" 25 | ;; 26 | *) 27 | echo -e "Unsupport System" 28 | exit 1 29 | ;; 30 | esac 31 | 32 | echo -e '*****************************************************************' 33 | echo -e '***************************** START *****************************' 34 | echo -e '*****************************************************************' 35 | 36 | #定义主进程 37 | function main { 38 | 39 | #获取静态ip列表 40 | local ipjson=$(aws lightsail --region $REGION get-static-ips) 41 | 42 | #获取静态ip数量 43 | local NUM_IP=$(echo $ipjson | jq -r '.|length') 44 | 45 | for (( i = 0 ; i < $NUM_IP ; i++ )) 46 | do 47 | echo -e '=========================seq '$i' start=========================' 48 | 49 | #获取ip各项信息 50 | local OLD_IP=$(echo $ipjson | jq -r '.[]['$i'].ipAddress') 51 | local INSTANCE_NAME=$(echo $ipjson | jq -r '.[]['$i'].attachedTo') 52 | local STATIC_IP_NAME=$(echo $ipjson | jq -r '.[]['$i'].name') 53 | 54 | echo -e "1. checking vps "$OLD_IP 55 | 56 | ping -c $PINGTIMES $OLD_IP > temp.$OLD_IP.txt 2>&1 57 | grep "$CHECK_PING" temp.$OLD_IP.txt 58 | if [ $? != 0 ] 59 | then 60 | echo -e "2. this IP is alive, nothing happened" 61 | else 62 | echo -e "2. this vps is dead, process start" 63 | #删除原静态ip 64 | aws lightsail --region $REGION release-static-ip --static-ip-name $STATIC_IP_NAME 65 | #新建静态ip 66 | aws lightsail --region $REGION allocate-static-ip --static-ip-name $STATIC_IP_NAME 67 | #绑定静态ip 68 | aws lightsail --region $REGION attach-static-ip --static-ip-name $STATIC_IP_NAME --instance-name $INSTANCE_NAME 69 | #获取新ip 70 | local instancejson=$(aws lightsail --region $REGION get-instance --instance-name $INSTANCE_NAME) 71 | local NEW_IP=$(echo $instancejson | jq -r '.[].publicIpAddress') 72 | 73 | #发送通知 74 | if [ $NOTIFICATION = 1 ] 75 | then 76 | text="IP地址已更换" 77 | desp="您在${REGION}的${INSTANCE_NAME}服务器IP:${OLD_IP}已更换至${NEW_IP}。" 78 | notification "${text}" "${desp}" 79 | fi 80 | fi 81 | rm -rf temp.$OLD_IP.txt 82 | done 83 | } 84 | 85 | #定义函数发送serverChan通知 86 | function notification { 87 | local json=$(curl -s https://sc.ftqq.com/$SERVERCHAN_KEY.send --data-urlencode "text=$1" --data-urlencode "desp=$2") 88 | errno=$(echo $json | jq .errno) 89 | errmsg=$(echo $json | jq .errmsg) 90 | if [ $errno = 0 ] 91 | then 92 | echo -e 'notice send success' 93 | else 94 | echo -e 'notice send faild' 95 | echo -e "the error message is ${errmsg}" 96 | fi 97 | } 98 | 99 | main $REGION 100 | 101 | echo -e '*****************************************************************' 102 | echo -e '****************************** END ******************************' 103 | echo -e '*****************************************************************' 104 | 105 | exit 0 106 | --------------------------------------------------------------------------------