阿里云手动更新dns解析
生活随笔
收集整理的這篇文章主要介紹了
阿里云手动更新dns解析
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
腳本1
#!/bin/bash # alidns.sh #https://www.cnblogs.com/elvi/p/11663910.html #阿里云DNS api接口 shell 更改DNS解析############################## which dig &>/dev/null || { yum install -y bind-utils ; } || { echo "need to install dig";exit 1; }##配置 host="openvpn" #主機(jī)名 domain="tianqixuda.com" #域名 ak="XXXXXXXXX" #阿里云AccessKey ID sk="XXXXXXXXXXXXX&" #阿里云Access Key Secret 后面多個(gè) & timestamp=`date -u +"%Y-%m-%dT%H:%M:%SZ"`############################## #hash簽名使用 urlencode1() {local length="${#1}"i=0out=""for i in $(awk "BEGIN { for ( i=0; i<$length; i++ ) { print i; } }")dolocal c="${1:$i:1}"case $c in[a-zA-Z0-9.~'&'=_-]) out="$out$c" ;;*) out="$out`printf '%%%02X' "'$c"`" ;;esaci=$(($i + 1))doneecho -n $out } urlencode2() {local length="${#1}"i=0out=""for i in $(awk "BEGIN { for ( i=0; i<$length; i++ ) { print i; } }")dolocal c="${1:$i:1}"case $c in[a-zA-Z0-9.~_-]) out="$out$c" ;;*) out="$out`printf '%%%02X' "'$c"`" ;;esaci=$(($i + 1))doneecho -n $out }############################## #函數(shù)send_request() { args="AccessKeyId=$ak&Action=$1&Format=json&$2&Version=2015-01-09" StringToSign1="$(urlencode1 $args)" StringToSign2="GET&%2F&$(urlencode2 $StringToSign1)" hash=$(urlencode2 $(echo -n "$StringToSign2" | openssl dgst -sha1 -hmac $sk -binary | openssl base64)) RESULT=$(curl -k -s "https://alidns.aliyuncs.com/?$args&Signature=$hash") ## 2> /dev/null) echo $RESULT } query_recordid() {if [ "$host" = "@" ]; then echo `send_request "DescribeSubDomainRecords" "SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&SubDomain=$domain&Timestamp=$timestamp"`else echo `send_request "DescribeSubDomainRecords" "SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&SubDomain=$host.$domain&Timestamp=$timestamp"`fi } update_record() {echo `send_request "UpdateDomainRecord" "RR=$host&RecordId=$1&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&Timestamp=$timestamp&Type=A&Value=$ip"` } add_record() {echo `send_request "AddDomainRecord&DomainName=$domain" "RR=$host&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&Timestamp=$timestamp&Type=A&Value=$ip"` }add_host() { #echo "新增解析" RESULT=`add_record` record_id=$(echo $RESULT | grep -o "RecordId\":\"[0-9]*\"" | grep -o "[0-9]*") [ "$record_id" = "" ] && { echo "$host.$domain $ip AddError";exit 1; } echo "$host.$domain $ip AddHost $(date +'%F %T')" }up_host() { #echo "更新解析" #查詢RecordId RESULT=`query_recordid` record_id=$(echo $RESULT | grep -o "RecordId\":\"[0-9]*" | grep -o "[0-9]*") [ "$record_id" = "" ] && { echo "get record_id error";exit 1; } #更新 RESULT=`update_record $record_id` record_id=$(echo $RESULT | grep -o "RecordId\":\"[0-9]*\"" | grep -o "[0-9]*") [ "$record_id" = "" ] && { echo "$host.$domain $ip UpError";exit 1; } echo "$host.$domain $ip UpHost $(date +'%F %T')" }############################## #獲取本地外網(wǎng)ip并更新dns#ip UA="Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.3; blog.elven.vip)" ip=$(curl -s -A "$UA" http://ipv4.icanhazip.com) ip_dns=$(dig @dns23.hichina.com ${host}.${domain} A +short) # echo ip $ip # echo ip_dns $ip_dns # [ -n "$ip" ] || { echo "ip error"; }if [ -n "$ip_dns" -a "$ip_dns" = "$ip" ];thenecho "$host.$domain $ip_dns" elif [ "$ip_dns" = "" ];thenadd_host elseup_host fi############################## #傳參 主機(jī) 域名 ipalidns() { # var: host domain ip host="$1" domain=$2 ip=$3 ip_dns=$(dig @dns23.hichina.com ${host}.${domain} A +short)if [ $# -eq 2 ];thenif [ -n "$ip_dns" ];thenecho "$host.$domain $ip_dns"elseecho "$host.$domain no found"fi elif [ $# -eq 3 ];thenif [ "$ip" = "$ip_dns" ];thenecho "$host.$domain $ip_dns"else[ `echo $ip |grep -oE '[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}' |wc -l` -eq 0 ] && { echo "ip $ip error";exit 1; }[ "$ip_dns" = "" ] && { add_host ; } || { up_host ; }fi elseecho "eg:$0 www abc.com 192.168.18.18" fi }alidns "$@"# 使用實(shí)例 增加或更新 *.abc.elven.vip ,通配符使用'' # bash alidns.sh '*.abc' elven.vip 192.168.18.18 ############################## # api https://help.aliyun.com/knowledge_detail/39863.html ##############################腳本二
#!/bin/bash# 更新日志 # Update 20180914 : # [Fix] 再次修復(fù): CPU 100%占用問題 # 這次找到了AliDDNS卡100%死循環(huán)的原因,并且加了一個(gè)小的檢測(cè)機(jī)制,理論上應(yīng)該不會(huì)再出現(xiàn) # CPU卡100%的問題了(如果有問題請(qǐng)私信腳本作者,謝謝!)BuildTime="20180914"# 專家模式開關(guān) # 注意: 只有當(dāng)你了解整個(gè)AliDDNS工作流程,并且有一定的動(dòng)手能力,希望對(duì)AliDDNS腳本的更多參數(shù)進(jìn)行 # 深度定制時(shí),你可以打開這個(gè)開關(guān),會(huì)提供更多可以設(shè)置的選項(xiàng),但如果你不懂、超級(jí)小白,請(qǐng)不要 # 打開這個(gè)開關(guān)!因打開專家模式后配置失誤發(fā)生的問題,作者不負(fù)任何責(zé)任! # 如需打開專家模式,請(qǐng)將腳本文件中的 Switch_AliDDNS_ExpertMode 變量值設(shè)置為1,即可打開 # 專家模式,如需關(guān)閉,請(qǐng)將此值設(shè)置為0! Switch_AliDDNS_ExpertMode="0" echo " " echo `date` # =================================================================================== # # 下面的代碼均為程序的核心代碼,請(qǐng)不要觸動(dòng)任何地方的代碼,直接運(yùn)行腳本即可使用! # # ===================================================================================# Shell環(huán)境初始化 # 字體顏色定義 Font_Black="\033[30m" Font_Red="\033[31m" Font_Green="\033[32m" Font_Yellow="\033[33m" Font_Blue="\033[34m" Font_Purple="\033[35m" Font_SkyBlue="\033[36m" Font_White="\033[37m" Font_Suffix="\033[0m" # 消息提示定義 Msg_Info="${Font_Blue}[Info] ${Font_Suffix}" Msg_Warning="${Font_Yellow}[Warning] ${Font_Suffix}" Msg_Error="${Font_Red}[Error] ${Font_Suffix}" Msg_Success="${Font_Green}[Success] ${Font_Suffix}" Msg_Fail="${Font_Red}[Failed] ${Font_Suffix}" # Shell變量開關(guān)初始化 Switch_env_is_root="0" Switch_env_curl_exist="0" Switch_env_openssl_exist="0" Switch_env_nslookup_exist="0" Switch_env_sudo_exist="0" Switch_env_system_release="none" # AliDDNS組件-變量初始化 AliDDNS_DomainName="" AliDDNS_SubDomainName="" AliDDNS_TTL="" AliDDNS_AK="" AliDDNS_SK="" AliDDNS_LocalIP="" AliDDNS_DomainServerIP="" # ServerChan組件-變量初始化 Switch_ServerChan_Enable="0" ServerChan_SCKEY="" ServerChan_Text="" ServerChan_Content=""# Shell腳本信息顯示 #echo -e "${Font_Green} #========================================================= # AliDDNS 工具 (阿里云云解析修改工具) # # Build: ${BuildTime} # 支持平臺(tái): CentOS/Debian/Ubuntu # 作者: iLemonrain (原作者: kyriosli/koolshare-aliddns) # Blog: https://blog.ilemonrain.com # E-mail: ilemonrain@ilemonrain.com #========================================================#${Font_suffix}"# 檢查Root權(quán)限,并配置開關(guān) function_Check_Root(){if [ "`id -u`" != "0" ]; thenSwitch_env_is_root="0"elseSwitch_env_is_root="1"fi }function_Check_Enviroment(){if [ -f "/usr/bin/curl" ]; thenSwitch_env_curl_exist="1"elseSwitch_env_curl_exist="0"fiif [ -f "/usr/bin/openssl" ]; thenSwitch_env_openssl_exist="1"elseSwitch_env_openssl_exist="0"fiif [ -f "/usr/bin/nslookup" ]; thenSwitch_env_nslookup_exist="1"elseSwitch_env_nslookup_exist="0"fiif [ -f "/usr/bin/sudo" ]; thenSwitch_env_sudo_exist="1"elseSwitch_env_sudo_exist="0"fiif [ -f "/etc/redhat-release" ]; thenSwitch_env_system_release="centos"elif [ -f "/etc/lsb-release" ]; thenSwitch_env_system_release="ubuntu"elif [ -f "/etc/debian_version" ]; thenSwitch_env_system_release="debian"elseSwitch_env_system_release="unknown"fi }function_Install_Enviroment(){if [ "${Switch_env_curl_exist}" = "0" ] || [ "${Switch_env_openssl_exist}" = "0" ] || [ "${Switch_env_nslookup_exist}" = "0" ]; thenecho -e "${Msg_Warning}未檢查到必需組件或者組件不完整,正在嘗試安裝……"if [ "${Switch_env_is_root}" = "1" ]; thenif [ "${Switch_env_system_release}" = "centos" ]; thenecho -e "${Msg_Info}檢測(cè)到系統(tǒng)分支:CentOS"echo -e "${Msg_Info}正在安裝必需組件……"yum install curl bind-utils openssl -yelif [ "${Switch_env_system_release}" = "ubuntu" ]; thenecho -e "${Msg_Info}檢測(cè)到系統(tǒng)分支:Ubuntu"echo -e "${Msg_Info}正在安裝必需組件……"apt-get install curl dnsutils openssl -yelif [ "${Switch_env_system_release}" = "debian" ]; thenecho -e "${Msg_Info}檢測(cè)到系統(tǒng)分支:Debian"echo -e "${Msg_Info}正在安裝必需組件……"apt-get install curl dnsutils openssl -yelseecho -e "${Msg_Warning}系統(tǒng)分支未知,取消環(huán)境安裝,建議手動(dòng)安裝環(huán)境!"fiif [ -f "/usr/bin/curl" ]; thenSwitch_env_curl_exist="1"elseSwitch_env_curl_exist="0"echo -e "${Msg_Error}curl組件安裝失敗!可能會(huì)影響到程序運(yùn)行!建議手動(dòng)安裝!"fiif [ -f "/usr/bin/openssl" ]; thenSwitch_env_openssl_exist="1"elseSwitch_env_openssl_exist="0"echo -e "${Msg_Error}openssl組件安裝失敗!可能會(huì)影響到程序運(yùn)行!建議手動(dòng)安裝!"fiif [ -f "/usr/bin/nslookup" ]; thenSwitch_env_nslookup_exist="1"elseSwitch_env_nslookup_exist="0"echo -e "${Msg_Error}nslookup組件安裝失敗!可能會(huì)影響到程序運(yùn)行!建議手動(dòng)安裝!"fielif [ -f "/usr/bin/sudo" ]; thenecho -e "${Msg_Warning}檢測(cè)到當(dāng)前腳本并非以root權(quán)限啟動(dòng),正在嘗試通過sudo命令安裝……"if [ "${Switch_env_system_release}" = "centos" ]; thenecho -e "${Msg_Info}檢測(cè)到系統(tǒng)分支:CentOS"echo -e "${Msg_Info}正在安裝必需組件 (使用sudo)……"sudo yum install curl bind-utils -yelif [ "${Switch_env_system_release}" = "ubuntu" ]; thenecho -e "${Msg_Info}檢測(cè)到系統(tǒng)分支:Ubuntu"echo -e "${Msg_Info}正在安裝必需組件 (使用sudo)……"sudo apt-get install curl dnsutils -yelif [ "${Switch_env_system_release}" = "debian" ]; thenecho -e "${Msg_Info}檢測(cè)到系統(tǒng)分支:Debian"echo -e "${Msg_Info}正在安裝必需組件 (使用sudo)……"sudo apt-get install curl dnsutils -yelseecho -e "${Msg_Warning}系統(tǒng)分支未知,取消環(huán)境安裝,建議手動(dòng)安裝環(huán)境!"fielseecho -e "${Msg_Error}系統(tǒng)缺少必需環(huán)境,并且無法自動(dòng)安裝,建議手動(dòng)安裝!"fifi }# 判斷是否有已存在的配置文件 (是否已經(jīng)配置過環(huán)境) function_AliDDNS_CheckConfig(){if [ -f "/etc/OneKeyAliDDNS/config.cfg" ]; thenecho -e "${Msg_Info}檢測(cè)到存在的配置,自動(dòng)讀取現(xiàn)有配置\n 如果你不需要,請(qǐng)通過菜單中的清理環(huán)境選項(xiàng)進(jìn)行清除"# 讀取配置文件AliDDNS_DomainName=`sed '/^AliDDNS_DomainName=/!d;s/.*=//' /etc/OneKeyAliDDNS/config.cfg | sed 's/\"//g'`AliDDNS_SubDomainName=`sed '/^AliDDNS_SubDomainName=/!d;s/.*=//' /etc/OneKeyAliDDNS/config.cfg | sed 's/\"//g'`AliDDNS_TTL=`sed '/^AliDDNS_TTL=/!d;s/.*=//' /etc/OneKeyAliDDNS/config.cfg | sed 's/\"//g'`AliDDNS_AK=`sed '/^AliDDNS_AK=/!d;s/.*=//' /etc/OneKeyAliDDNS/config.cfg | sed 's/\"//g'`AliDDNS_SK=`sed '/^AliDDNS_SK=/!d;s/.*=//' /etc/OneKeyAliDDNS/config.cfg | sed 's/\"//g'`AliDDNS_LocalIP=`sed '/^AliDDNS_LocalIP=/!d;s/.*=//' /etc/OneKeyAliDDNS/config.cfg | sed 's/\"//g'`AliDDNS_DomainServerIP=`sed '/^AliDDNS_DomainServerIP=/!d;s/.*=//' /etc/OneKeyAliDDNS/config.cfg | sed 's/\"//g'`if [ "${AliDDNS_DomainName}" = "" ] || [ "${AliDDNS_SubDomainName}" = 0 ] || [ "${AliDDNS_TTL}" = "" ] \|| [ "${AliDDNS_AK}" = "" ] || [ "${AliDDNS_SK}" = "" ] || [ "${AliDDNS_LocalIP}" = "" ] \|| [ "${AliDDNS_DomainServerIP}" = "" ]; thenecho -e "${Msg_Error}配置文件有誤,請(qǐng)檢查配置文件,或者建議清理環(huán)境后重新配置 !"exit 1fiSwitch_AliDDNS_Config_Exist="1"elseSwitch_AliDDNS_Config_Exist="0"fi }function_AliDDNS_SetConfig(){# AliDDNS_DomainNameif [ "${AliDDNS_DomainName}" = "" ]; thenecho -e "\n${Msg_Info}請(qǐng)輸入一級(jí)域名 (比如 example.com)"read -p "(此項(xiàng)必須填寫,查看幫助請(qǐng)輸入“h”):" AliDDNS_DomainName[ "${AliDDNS_DomainName}" = "h" ] && function_document_AliDDNS_DomainName && echo -e "${Msg_Info}請(qǐng)輸入一級(jí)域名 (比如 example.com)" && read -p "(此項(xiàng)必須填寫,查看提示請(qǐng)輸入 "h"):" AliDDNS_DomainNamewhile [ -z "${AliDDNS_DomainName}" ]doecho -e "${Msg_Error}此項(xiàng)不可為空,請(qǐng)重新填寫"echo -e "${Msg_Info}請(qǐng)輸入一級(jí)域名 (比如 example.com)"read -p "(此項(xiàng)必須填寫,查看幫助請(qǐng)輸入“h”):" AliDDNS_DomainNamedonefi# AliDDNS_SubDomainNameif [ "${AliDDNS_SubDomainName}" = "" ]; thenecho -e "\n${Msg_Info}請(qǐng)輸入二級(jí)域名 (比如 ddns)"read -p "(此項(xiàng)必須填寫,查看幫助請(qǐng)輸入“h”):" AliDDNS_SubDomainName[ "${AliDDNS_SubDomainName}" = "h" ] && function_document_AliDDNS_SubDomainName && echo -e "${Msg_Info}請(qǐng)輸入二級(jí)域名 (比如 ddns)" && read -p "(此項(xiàng)必須填寫,查看幫助請(qǐng)輸入“h”):" AliDDNS_SubDomainNamewhile [ -z "${AliDDNS_SubDomainName}" ]doecho -e "${Msg_Error}此項(xiàng)不可為空,請(qǐng)重新填寫"echo -e "${Msg_Info}請(qǐng)輸入二級(jí)域名 (比如 ddns)"read -p "(此項(xiàng)必須填寫,查看幫助請(qǐng)輸入“h”):" AliDDNS_SubDomainNamedonefi# AliDDNS_TTLif [ "${AliDDNS_TTL}" = "" ]; thenecho -e "\n${Msg_Info}請(qǐng)輸入記錄的TTL(Time-To-Live)值:"read -p "(默認(rèn)為600,查看幫助請(qǐng)輸入“h”):" AliDDNS_TTL[ "${AliDDNS_TTL}" = "h" ] && function_document_AliDDNS_TTL && echo -e "${Msg_Info}請(qǐng)輸入記錄的TTL(Time-To-Live)值:" && read -p "(默認(rèn)為600):" AliDDNS_TTL[ -z "${AliDDNS_TTL}" ] && echo -e "${Msg_Info}檢測(cè)到輸入空值,設(shè)置AliDDNS_TTL值為:“600”" && AliDDNS_TTL="600"fi# AliDDNS_AKif [ "${AliDDNS_AK}" = "" ]; thenecho -e "\n${Msg_Info}請(qǐng)輸入阿里云AccessKey ID"read -p "(此項(xiàng)必須填寫,查看幫助請(qǐng)輸入“h”):" AliDDNS_AK[ "${AliDDNS_AK}" = "h" ] && function_document_AliDDNS_AK && echo -e "${Msg_Info}請(qǐng)輸入阿里云AccessKey ID" && read -p "(此項(xiàng)必須填寫,查看幫助請(qǐng)輸入“h”):" AliDDNS_AKwhile [ -z "${AliDDNS_AK}" ]doecho -e "${Msg_Error}此項(xiàng)不可為空,請(qǐng)重新填寫"echo -e "${Msg_Info}請(qǐng)輸入阿里云AccessKey ID"read -p "(此項(xiàng)必須填寫,查看幫助請(qǐng)輸入“h”):" AliDDNS_AKdonefi# AliDDNS_SKif [ "${AliDDNS_SK}" = "" ]; thenecho -e "\n${Msg_Info}請(qǐng)輸入阿里云Access Key Secret"read -p "(此項(xiàng)必須填寫,查看幫助請(qǐng)輸入“h”):" AliDDNS_SK[ "${AliDDNS_SK}" = "h" ] && function_document_AliDDNS_SK && echo -e "${Msg_Info}請(qǐng)輸入阿里云Access Key Secret" && read -p "(默認(rèn)為600):" AliDDNS_SKwhile [ -z "${AliDDNS_SK}" ]doecho -e "${Msg_Error}此項(xiàng)不可為空,請(qǐng)重新填寫"echo -e "${Msg_Info}請(qǐng)輸入阿里云Access Key Secret"read -p "(此項(xiàng)必須填寫,查看幫助請(qǐng)輸入“h”):" AliDDNS_SKdonefi# AliDDNS_LocalIPif [ "${Switch_AliDDNS_ExpertMode}" = "1" ]; thenif [ "${AliDDNS_LocalIP}" = "" ]; thenecho -e "\n${Msg_Info}請(qǐng)輸入獲取本機(jī)IP使用的命令"read -p "(查看幫助請(qǐng)輸入“h”):" AliDDNS_LocalIP[ "${AliDDNS_LocalIP}" = "h" ] && function_document_AliDDNS_LocalIP && echo -e "${Msg_Info}請(qǐng)輸入獲取本機(jī)IP使用的命令" && read -p "(查看幫助請(qǐng)輸入“h”):" AliDDNS_LocalIP[ -z "${AliDDNS_LocalIP}" ] && echo -e "${Msg_Info}檢測(cè)到輸入空值,設(shè)置執(zhí)行命令為:“curl -s whatismyip.akamai.com”" && AliDDNS_LocalIP="curl -s whatismyip.akamai.com"fielseAliDDNS_LocalIP="curl -s whatismyip.akamai.com"fi# AliDDNS_DomainServerIPif [ "${Switch_AliDDNS_ExpertMode}" = "1" ]; thenif [ "${AliDDNS_DomainServerIP}" = "" ]; thenecho -e "\n${Msg_Info}請(qǐng)輸入解析使用的DNS服務(wù)器"read -p "(此項(xiàng)必須填寫,查看幫助請(qǐng)輸入“h”):" AliDDNS_DomainServerIP[ "${AliDDNS_DomainServerIP}" = "h" ] && function_document_AliDDNS_DomainServerIP && echo -e "${Msg_Info}請(qǐng)輸入解析使用的DNS服務(wù)器" && read -p "(此項(xiàng)必須填寫,查看幫助請(qǐng)輸入“h”):" AliDDNS_DomainServerIP[ -z "${AliDDNS_DomainServerIP}" ] && echo -e "${Msg_Info}檢測(cè)到輸入空值,設(shè)置默認(rèn)DNS服務(wù)器為:“223.5.5.5”" && AliDDNS_DomainServerIP="223.5.5.5"fielseAliDDNS_DomainServerIP="223.5.5.5"fi }function_AliDDNS_WriteConfig(){# 寫入配置文件echo -e "\n${Msg_Info}正在寫入配置文件……"if [ "${Switch_env_is_root}" = "1" ]; then Config_configdir="/etc/OneKeyAliDDNS/"elseConfig_configdir="~/OneKeyAliDDNS/"fimkdir -p ${Config_configdir}rm -f ${Config_configdir}config.cfgcat>${Config_configdir}config.cfg<<EOF AliDDNS_DomainName="${AliDDNS_DomainName}" AliDDNS_SubDomainName="${AliDDNS_SubDomainName}" AliDDNS_TTL="${AliDDNS_TTL}" AliDDNS_AK="${AliDDNS_AK}" AliDDNS_SK="${AliDDNS_SK}" AliDDNS_LocalIP="${AliDDNS_LocalIP}" AliDDNS_DomainServerIP="${AliDDNS_DomainServerIP}" EOF }# 幫助文檔 function_document_AliDDNS_DomainName(){echo -e "${Msg_Info}${Font_Green}AliDDNS_DomainName 說明${Font_Suffix} 這個(gè)參數(shù)決定你要修改的DDNS域名中,一級(jí)域名的名稱。請(qǐng)保證你要配置的域名,DNS服務(wù)器已經(jīng)轉(zhuǎn)入阿里云云解析 (免費(fèi)版企業(yè)版都可以),也就是狀態(tài)必須為“正常”或者“未設(shè)置解析”,不可以為“DNS服務(wù)器錯(cuò)誤”等提示。此參數(shù)和 AliDDNS_SubDomainName 連接到一起 (即 AliDDNS_SubDomainName.AliDDNS_DomainName)即為最終配置的DDNS域名。例如AliDDNS.DomainName設(shè)置為“example”,AliDDNS_SubDomainName設(shè)置為“ddns”連接到一起就是“ddns.example.com”\n"AliDDNS_DomainName="" }function_document_AliDDNS_SubDomainName(){echo -e "${Msg_Info}${Font_Green}AliDDNS_SubDomainName 說明${Font_Suffix} 這個(gè)參數(shù)決定你要修改的DDNS域名中,二級(jí)域名的名稱。請(qǐng)保證你要配置的域名,DNS服務(wù)器已經(jīng)轉(zhuǎn)入阿里云云解析 (免費(fèi)版企業(yè)版都可以),也就是狀態(tài)必須為“正常”或者“未設(shè)置解析”,不可以為“DNS服務(wù)器錯(cuò)誤”等提示。此參數(shù)和 AliDDNS_SubDomainName 連接到一起 (即 AliDDNS_SubDomainName.AliDDNS_DomainName)即為最終配置的DDNS域名。例如AliDDNS.DomainName設(shè)置為“example”,AliDDNS_SubDomainName設(shè)置為“ddns”連接到一起就是“ddns.example.com”\n"AliDDNS_SubDomainName="" }function_document_AliDDNS_TTL(){echo -e "${Msg_Info}${Font_Green}AliDDNS_TTL 說明${Font_Suffix} 這個(gè)參數(shù)決定你要修改的DDNS記錄中,TTL(Time-To-Line)時(shí)長(zhǎng)。越短的TTL,DNS更新生效速度越快 (但也不是越快越好,因情況而定)免費(fèi)版產(chǎn)品可設(shè)置為 (600-86400) (即10分鐘-1天)收費(fèi)版產(chǎn)品可根據(jù)所購買的云解析企業(yè)版產(chǎn)品配置設(shè)置為 (1-86400) (即1秒-1天)請(qǐng)免費(fèi)版用戶不要設(shè)置TTL低于600秒,會(huì)導(dǎo)致運(yùn)行報(bào)錯(cuò)!\n"AliDDNS_TTL="" }function_document_AliDDNS_AK(){echo -e "${Msg_Info}${Font_Green}AliDDNS_AK 說明${Font_Suffix} 這個(gè)參數(shù)決定修改DDNS記錄所需要用到的阿里云API信息 (AccessKey ID)。獲取AccessKey ID和AccessKey Secret請(qǐng)移步:https://usercenter.console.aliyun.com/#/manage/ak${Font_Red}注意:${Font_Suffix}請(qǐng)不要泄露你的AK/SK給任何人!一旦他們獲取了你的AK/SK,將會(huì)直接擁有控制你阿里云賬號(hào)的能力!為了您的阿里云賬號(hào)安全,請(qǐng)不要隨意分享AK/SK(包括請(qǐng)求幫助時(shí)候的截圖)!"AliDDNS_AK="" }function_document_AliDDNS_SK(){echo -e "${Msg_Info}${Font_Green}AliDDNS_SK 說明${Font_Suffix} 這個(gè)參數(shù)決定修改DDNS記錄所需要用到的阿里云API信息 (Access Key Secret)。獲取AccessKey ID和AccessKey Secret請(qǐng)移步:https://usercenter.console.aliyun.com/#/manage/ak${Font_Red}注意:${Font_Suffix}請(qǐng)不要泄露你的AK/SK給任何人!一旦他們獲取了你的AK/SK,將會(huì)直接擁有控制你阿里云賬號(hào)的能力!為了您的阿里云賬號(hào)安全,請(qǐng)不要隨意分享AK/SK(包括請(qǐng)求幫助時(shí)候的截圖)!"AliDDNS_SK="" }function_document_AliDDNS_LocalIP(){echo -e "${Msg_Info}${Font_Green}AliDDNS_LocalIP 說明${Font_Suffix} 這個(gè)參數(shù)決定如何獲取到本機(jī)的IP地址。出于穩(wěn)定性考慮,默認(rèn)使用whatismyip.akamai.com作為獲取IP的方式,你也可以指定自己喜歡的獲取IP方式。輸入格式為需要執(zhí)行的命令。請(qǐng)不要在命令中帶雙引號(hào)!解析配置文件時(shí)候會(huì)過濾掉!"AliDDNS_LocalIP="" }function_document_AliDDNS_DomainServerIP(){echo -e "${Msg_Info}${Font_Green}AliDDNS_DomainServerIP 說明${Font_Suffix} 這個(gè)參數(shù)決定如何獲取到DDNS域名當(dāng)前的解析記錄。會(huì)使用nslookup命令查詢,此參數(shù)控制使用哪個(gè)DNS服務(wù)器進(jìn)行解析。默認(rèn)使用“223.5.5.5”進(jìn)行查詢 (因?yàn)槎际前⒗锛业臇|西)"AliDDNS_DomainServerIP="" }# 程序核心功能 ===========================================================# 獲取本機(jī)IP function_AliDDNS_GetLocalIP(){echo -e "${Msg_Info}正在獲取本機(jī)IP……"if [ "${AliDDNS_LocalIP}" = "" ]; thenecho -e "${Msg_Error}AliDDNS_LocalIP參數(shù)為空或無效!"echo -e "${Msg_Fail}程序運(yùn)行出現(xiàn)致命錯(cuò)誤,正在退出……"exit 1fiAliDDNS_LocalIP=`$AliDDNS_LocalIP 2>&1`if [ "${AliDDNS_LocalIP}" = "" ]; thenecho -e "${Msg_Error}未能獲取本機(jī)IP!"echo -e "${Msg_Fail}程序運(yùn)行出現(xiàn)致命錯(cuò)誤,正在退出……"exit 1elseecho -e "${Msg_Info}本機(jī)IP:${AliDDNS_LocalIP}"fi }# 新版獲取域名IP的方法,使用騰訊云的HttpDNS # #function_AliDDNS_DomainIP(){ # echo -e "${Msg_Info}正在獲取 $AliDDNS_SubDomainName.$AliDDNS_DomainName 的IP……" # AliDDNS_DomainIP=`curl -s http://119.29.29.29/d?dn=$AliDDNS_SubDomainName.$AliDDNS_DomainName` # if [ "$?" -eq "0" ]; then # # 如果執(zhí)行成功,分離出結(jié)果中的IP地址 # if [ "${AliDDNS_DomainIP}" = "" ]; then # echo -e "${Msg_Info}解析結(jié)果:$AliDDNS_SubDomainName.$AliDDNS_DomainName -> (結(jié)果為空)" # echo -e "${Msg_Warning}$AliDDNS_SubDomainName.$AliDDNS_DomainName 未檢測(cè)到任何有效的解析記錄,可能是DNS記錄不存在或尚未生效" # echo -e "${Msg_Info}程序可能會(huì)報(bào)告InvalidParameter異常錯(cuò)誤,如出現(xiàn)此錯(cuò)誤,請(qǐng)前往阿里云云解析面板手動(dòng)添加一條任意記錄值的A解析記錄即可!" # else # echo -e "${Msg_Info}解析結(jié)果:$AliDDNS_SubDomainName.$AliDDNS_DomainName -> $AliDDNS_DomainIP" # fi # # 進(jìn)行判斷,如果本次獲取的新IP和舊IP相同,結(jié)束程序運(yùn)行 # if [ "$AliDDNS_LocalIP" = "$AliDDNS_DomainIP" ] # then # echo -e "${Msg_Info}當(dāng)前IP ($AliDDNS_LocalIP) 與 $AliDDNS_SubDomainName.$AliDDNS_DomainName ($AliDDNS_DomainIP) 的IP相同" # echo -e "${Msg_Success}未發(fā)生任何變動(dòng),無需進(jìn)行改動(dòng),正在退出……" # exit 0 # fi # fi #} # 舊版獲取域名IP的方法,如果新版方法發(fā)生異常,請(qǐng)刪掉新版代碼,取消舊版的注釋,保存即可!# 獲取DDNS域名當(dāng)前解析記錄IP function_AliDDNS_DomainIP(){echo -e "${Msg_Info}正在獲取 $AliDDNS_SubDomainName.$AliDDNS_DomainName 的IP……"AliDDNS_DomainIP=`nslookup $AliDDNS_SubDomainName.$AliDDNS_DomainName $AliDDNS_DomainServerIP 2>&1`if [ "$?" -eq "0" ]; then# 如果執(zhí)行成功,分離出結(jié)果中的IP地址AliDDNS_DomainIP=`echo "$AliDDNS_DomainIP" | grep 'Address:' | tail -n1 | awk '{print $NF}'`if [ "${AliDDNS_DomainIP}" = "" ]; thenecho -e "${Msg_Info}解析結(jié)果:$AliDDNS_SubDomainName.$AliDDNS_DomainName -> (結(jié)果為空)"echo -e "${Msg_Info}$AliDDNS_SubDomainName.$AliDDNS_DomainName 未檢測(cè)到任何有效的解析記錄,可能是DNS記錄不存在或尚未生效"elseecho -e "${Msg_Info}解析結(jié)果:$AliDDNS_SubDomainName.$AliDDNS_DomainName -> $AliDDNS_DomainIP"fi# 進(jìn)行判斷,如果本次獲取的新IP和舊IP相同,結(jié)束程序運(yùn)行if [ "$AliDDNS_LocalIP" = "$AliDDNS_DomainIP" ]thenecho -e "${Msg_Info}當(dāng)前IP ($AliDDNS_LocalIP) 與 $AliDDNS_SubDomainName.$AliDDNS_DomainName ($AliDDNS_DomainIP) 的IP相同"echo -e "${Msg_Success}未發(fā)生任何變動(dòng),無需進(jìn)行改動(dòng),正在退出……"exit 0fi fi }function_AliDDNS_GetTimestamp(){echo -e "${Msg_Info}正在生成時(shí)間戳……"timestamp=`date -u "+%Y-%m-%dT%H%%3A%M%%3A%SZ"` }urlencode() {# urlencode <string>out=""while read -n1 cdocase $c in[a-zA-Z0-9._-]) out="$out$c" ;;*) out="$out`printf '%%%02X' "'$c"`" ;;esacdoneecho -n $out } # URL加密命令 enc() {echo -n "$1" | urlencode } # 發(fā)送請(qǐng)求函數(shù) send_request() {local args="AccessKeyId=$AliDDNS_AK&Action=$1&Format=json&$2&Version=2015-01-09"local hash=$(echo -n "GET&%2F&$(enc "$args")" | openssl dgst -sha1 -hmac "$AliDDNS_SK&" -binary | openssl base64)curl -s "http://alidns.aliyuncs.com/?$args&Signature=$(enc "$hash")" } # 獲取記錄值 (RecordID) get_recordid() {grep -Eo '"RecordId":"[0-9]+"' | cut -d':' -f2 | tr -d '"' } # 請(qǐng)求記錄值 (RecordID) query_recordid() {send_request "DescribeSubDomainRecords" "SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&SubDomain=$AliDDNS_SubDomainName.$AliDDNS_DomainName&Timestamp=$timestamp" } # 更新記錄值 (RecordID) update_record() {send_request "UpdateDomainRecord" "RR=$AliDDNS_SubDomainName&RecordId=$1&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&TTL=$AliDDNS_TTL&Timestamp=$timestamp&Type=A&Value=$AliDDNS_LocalIP" } # (Update 20180703 Bugfix : 屏蔽add_record,避免發(fā)生記錄重復(fù)沖突問題,感謝 mylyne 反饋) # 添加記錄值 (RecordID) # add_record() { # send_request "AddDomainRecord" "RR=$AliDDNS_SubDomainName&DomainName=$AliDDNS_DomainName&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&TTL=$AliDDNS_TTL&Timestamp=$timestamp&Type=A&Value=$AliDDNS_LocalIP" # } # RecordID更新 function_AliDDNS_UpdateRecord(){echo -e "${Msg_Info}正在更新記錄……"if [ "${AliDDNS_RecordID}" = "" ]; thenecho -e "${Msg_Info}正在獲取RecordID……"AliDDNS_RecordID=`query_recordid | get_recordid`if [ "${AliDDNS_RecordID}" = "" ]; thenecho -e "${Msg_Warning}未能獲取到RecordID,可能沒有檢測(cè)到有效的解析記錄 (RecordID:$AliDDNS_RecordID)"elseecho -e "${Msg_Info}RecordID -> $AliDDNS_RecordID"echo -e "${Msg_Info}正在更新解析記錄:$AliDDNS_SubDomainName.$AliDDNS_DomainName -> $AliDDNS_LocalIP ……"update_record $AliDDNS_RecordIDecho -e "\n${Msg_Info}已經(jīng)更新RecordID:$AliDDNS_RecordID"fifiif [ "${AliDDNS_RecordID}" = "" ]; then# 輸出失敗結(jié)果 (因?yàn)闆]有獲取到RecordID)echo -e "${Msg_Fail}DDNS記錄更新失敗!"exit 1else# 輸出成功結(jié)果echo -e "${Msg_Success}DDNS記錄更新成功,新的IP為:$AliDDNS_LocalIP"# ServerChan推送組件function_ServerChan_SuccessMsgPushexit 0fi } function_AliDDNS_CleanEnviroment(){rm -f /etc/OneKeyAliDDNS/config.cfgrm -f ~/OneKeyAliDDNS/config.cfgrm -f /etc/OneKeyAliDDNS/config-ServerChan.cfgrm -f ~/OneKeyAliDDNS/config-ServerChan.cfgSwitch_env_is_root="0"AliDDNS_DomainName=""AliDDNS_SubDomainName=""AliDDNS_TTL=""AliDDNS_AK=""AliDDNS_SK=""AliDDNS_LocalIP=""AliDDNS_DomainServerIP=""Switch_ServerChan_Enable="0"ServerChan_SCKEY=""ServerChan_Text=""ServerChan_Content="" } function_AliDDNS_ShowVersion(){echo -e " # AliDDNS 工具 (阿里云云解析修改工具) # # Build: ${BuildTime} # 支持平臺(tái): CentOS/Debian/Ubuntu # 作者: iLemonrain (原作者: kyriosli/koolshare-aliddns) # Blog: https://blog.ilemonrain.com # E-mail: ilemonrain@ilemonrain.com " exit 0 } function_ServerChan_Configure(){if [ "${ServerChan_SCKEY}" = "" ]; thenecho -e "\n${Msg_Info}請(qǐng)輸入ServerChan SCKEY:"read -p "(此項(xiàng)必須填寫):" ServerChan_SCKEY[ "${ServerChan_SCKEY}" = "h" ] && function_document_ServerChan_SCKEY && echo -e "${Msg_Info}請(qǐng)輸入ServerChan SCKEY:" && read -p "(此項(xiàng)必須填寫,查看提示請(qǐng)輸入 "h"):" ServerChan_SCKEYwhile [ -z "${ServerChan_SCKEY}" ]doecho -e "${Msg_Error}此項(xiàng)不可為空,請(qǐng)重新填寫"echo -e "${Msg_Info}請(qǐng)輸入ServerChan SCKEY:"read -p "(此項(xiàng)必須填寫):" ServerChan_SCKEYdonefiif [ "${ServerChan_ServerFriendlyName}" = "" ]; thenecho -e "\n${Msg_Info}請(qǐng)輸入服務(wù)器名稱:請(qǐng)使用中文/英文,不要使用除了英文下劃線以外任何符號(hào)"read -p "(此項(xiàng)必須填寫,便于識(shí)別):" ServerChan_ServerFriendlyName[ "${ServerChan_ServerFriendlyName}" = "h" ] && function_document_ServerChan_ServerFriendlyName && echo -e "${Msg_Info}請(qǐng)輸入服務(wù)器名稱:請(qǐng)使用中文/英文,不要使用除了英文下劃線以外任何符號(hào)" && read -p "(此項(xiàng)必須填寫,便于識(shí)別):" ServerChan_ServerFriendlyNamewhile [ -z "${ServerChan_ServerFriendlyName}" ]doecho -e "${Msg_Error}此項(xiàng)不可為空,請(qǐng)重新填寫"echo -e "${Msg_Info}請(qǐng)輸入服務(wù)器名稱:請(qǐng)使用中文/英文,不要使用除了英文下劃線以外任何符號(hào)"read -p "(此項(xiàng)必須填寫,便于識(shí)別):" ServerChan_ServerFriendlyNamedonefi } function_ServerChan_CheckConfig(){if [ -f "/etc/OneKeyAliDDNS/config-ServerChan.cfg" ]; thenSwitch_ServerChan_ConfigExist="1"elseSwitch_ServerChan_ConfigExist="0"fi } function_ServerChan_ReadConfig(){if [ -f "/etc/OneKeyAliDDNS/config-ServerChan.cfg" ]; then# 讀取配置文件Switch_ServerChan_Enable=`sed '/^Switch_ServerChan_Enable=/!d;s/.*=//' /etc/OneKeyAliDDNS/config-ServerChan.cfg | sed 's/\"//g'`ServerChan_ServerFriendlyName=`sed '/^ServerChan_ServerFriendlyName=/!d;s/.*=//' /etc/OneKeyAliDDNS/config-ServerChan.cfg | sed 's/\"//g'`ServerChan_SCKEY=`sed '/^ServerChan_SCKEY=/!d;s/.*=//' /etc/OneKeyAliDDNS/config-ServerChan.cfg | sed 's/\"//g'`# 開關(guān)變量設(shè)1Switch_ServerChan_ConfigExist="1"elseSwitch_ServerChan_ConfigExist="0"fi } function_ServerChan_WriteConfig(){# 寫入配置文件echo -e "\n${Msg_Info}正在寫入配置文件……"if [ "${Switch_env_is_root}" = "1" ]; then Config_configdir="/etc/OneKeyAliDDNS/"elseConfig_configdir="~/OneKeyAliDDNS/"fimkdir -p ${Config_configdir}rm -f ${Config_configdir}config-ServerChan.cfgcat>${Config_configdir}config-ServerChan.cfg<<EOF Switch_ServerChan_Enable="${Switch_ServerChan_Enable}" ServerChan_ServerFriendlyName="${ServerChan_ServerFriendlyName}" ServerChan_SCKEY="${ServerChan_SCKEY}" EOF } # 如果你有動(dòng)手能力,可以嘗試定制ServerChan推送的消息內(nèi)容 function_ServerChan_SuccessMsgPush(){function_ServerChan_ReadConfigif [ "${Switch_ServerChan_ConfigExist}" = "1" ]; thenif [ ${Switch_ServerChan_Enable} = "1" ]; thenecho -e "${Msg_Info}檢測(cè)到ServerChan配置,正在推送消息到ServerChan平臺(tái)……"ServerChan_Text="服務(wù)器IP發(fā)生變動(dòng)_AliDDNSv2"ServerChan_Content="服務(wù)器:${ServerChan_ServerFriendlyName},新的IP為:$AliDDNS_LocalIP,請(qǐng)注意服務(wù)器狀態(tài)"curl -s "http://sc.ftqq.com/$ServerChan_SCKEY.send?text=${ServerChan_Text}" -d "&desp=${ServerChan_Content}"if [ "$?" -eq "0" ]; thenecho -e "\n${Msg_Success}ServerChan 推送成功,服務(wù)器IP變動(dòng)消息已經(jīng)送達(dá)微信,請(qǐng)注意查收"elseecho -e "${Msg_Warning}ServerChan 推送失敗 (curl命令執(zhí)行出現(xiàn)異常)"fififirm -f /etc/OneKeyAliDDNS/_ServerChan_tmp_output } Entrance_AliDDNS_Configure_And_Run(){function_Check_Rootfunction_Check_Enviromentfunction_Install_Enviromentfunction_AliDDNS_CheckConfigfunction_AliDDNS_SetConfigfunction_AliDDNS_WriteConfigfunction_AliDDNS_GetLocalIPfunction_AliDDNS_DomainIPfunction_AliDDNS_GetTimestampfunction_AliDDNS_UpdateRecordexit 0 } Entrance_AliDDNS_RunOnly(){function_AliDDNS_CheckConfigif [ "${Switch_AliDDNS_Config_Exist}" = "0" ]; thenecho -e "${Msg_Error} 未檢測(cè)到任何有效配置,請(qǐng)先不帶參數(shù)運(yùn)行程序以進(jìn)行配置!"exit 1fifunction_Check_Enviromentfunction_Install_Enviromentfunction_AliDDNS_GetLocalIPfunction_AliDDNS_DomainIPfunction_AliDDNS_GetTimestampfunction_AliDDNS_UpdateRecordexit 0 } Entrance_AliDDNS_ConfigureOnly(){function_Check_Rootfunction_Check_Enviromentfunction_Install_Enviromentfunction_AliDDNS_CheckConfigfunction_AliDDNS_SetConfigfunction_AliDDNS_WriteConfigecho -e "${Msg_Success}配置文件寫入完成"exit 0 } Entrance_ServerChan_Config(){function_Check_Rootfunction_Check_Enviromentfunction_ServerChan_CheckConfigif [ "${Switch_ServerChan_ConfigExist}" = "1" ]; thenecho -e "${Msg_Info}ServerChan配置文件已存在,如需重新配置請(qǐng)執(zhí)行清理環(huán)境!"exit 0elseSwitch_ServerChan_Enable="1"function_ServerChan_Configurefunction_ServerChan_WriteConfigfiecho -e "${Msg_Success}配置文件寫入完成,重新執(zhí)行腳本即可激活ServerChan功能"echo -e "${Msg_Info}如需禁用ServerChan,執(zhí)行清理環(huán)境即可"exit 0 } Entrance_Global_CleanEnv(){echo -e "${Msg_Info}正在清理環(huán)境……"function_AliDDNS_CleanEnviromentecho -e "${Msg_Success}環(huán)境清理完成,重新執(zhí)行腳本以開始配置"exit 0 } Entrance_Version(){function_AliDDNS_ShowVersionexit 0 } case "$1" inrun)Entrance_AliDDNS_RunOnly;;config)Entrance_AliDDNS_ConfigureOnly;;clean)Entrance_Global_CleanEnv;;clean)Entrance_Version;;*)echo -e "${Font_Blue} AliDDNS 工具 (阿里云云解析修改工具)${Font_Suffix} 使用方法 (Usage): AliDDNS.sh run 配置并運(yùn)行工具 (如果已有配置將會(huì)直接運(yùn)行) AliDDNS.sh config 僅配置工具 AliDDNS.sh clean 清理配置文件及運(yùn)行環(huán)境 AliDDNS.sh version 顯示版本信息";; esac echo -e "${Msg_Info}選擇你要使用的功能: " echo -e " 1. 配置并運(yùn)行 AliDDNS \n 2. 僅配置 AliDDNS \n 3. 僅運(yùn)行 AliDDNS \n 4. 配置ServerChan微信推送 \n 5. 清理環(huán)境 \n 0. 退出 \n" read -p "輸入數(shù)字以選擇:" Function if [ "${Function}" == "1" ]; thenEntrance_AliDDNS_Configure_And_Run elif [ "${Function}" == "2" ]; thenEntrance_AliDDNS_ConfigureOnly elif [ "${Function}" == "3" ]; thenEntrance_AliDDNS_RunOnly elif [ "${Function}" == "4" ]; thenEntrance_ServerChan_Config elif [ "${Function}" == "5" ]; thenEntrance_Global_CleanEnv elseexit 0 fi總結(jié)
以上是生活随笔為你收集整理的阿里云手动更新dns解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “AI鉴黄师”数据采集标注方案上线
- 下一篇: pyplot 画多个图时搅合到了一起_家