阿里云DNS api接口 shell 更改DNS解析

可定时任务检查域名解析,调用alidns.sh更新DNS解析

#!/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="abcd" #主机名
domain="qq.com" #域名
ak="LTAI4FoDtp4y7ENqxxxxxxxxxx"  #阿里云AccessKey ID
sk="lVNCxCVGciaJqUxxxxxxxxxxxx&"  #阿里云Access Key Secret  后面多个 &
timestamp=`date -u +"%Y-%m-%dT%H:%M:%SZ"`

##############################
#hash签名使用
urlencode1() {
    local length="${#1}"
    i=0
    out=""
    for i in $(awk "BEGIN { for ( i=0; i<$length; i++ ) { print i; } }")
    do
        local c="${1:$i:1}"
        case $c in
            [a-zA-Z0-9.~'&'=_-]) out="$out$c" ;;
            *) out="$out`printf '%%%02X' "'$c"`" ;;
        esac
        i=$(($i + 1))
     done
     echo -n $out
}
urlencode2() {
    local length="${#1}"
    i=0
    out=""
    for i in $(awk "BEGIN { for ( i=0; i<$length; i++ ) { print i; } }")
    do
        local c="${1:$i:1}"
        case $c in
            [a-zA-Z0-9.~_-]) out="$out$c" ;;
            *) out="$out`printf '%%%02X' "'$c"`" ;;
        esac
        i=$(($i + 1))
     done
     echo -n $out
}

##############################
#函数

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')"
}

##############################
#获取本地外网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" ];then
    # echo "$host.$domain    $ip_dns"
# elif [ "$ip_dns" = "" ];then
    # add_host
# else
    # up_host
# fi

##############################
#传参  主机 域名 ip

alidns() {
# var:  host domain ip
host="$1"
domain=$2
ip=$3
ip_dns=$(dig @dns23.hichina.com ${host}.${domain} A +short)

if [ $# -eq 2 ];then
    if [ -n "$ip_dns" ];then
        echo "$host.$domain    $ip_dns"
    else
        echo "$host.$domain  no found"
    fi
elif [ $# -eq 3 ];then
    if [ "$ip" = "$ip_dns" ];then
        echo "$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
else
    echo "eg:$0  www  abc.com  192.168.18.18"
fi
}

alidns "[email protected]"

# 使用实例 增加或更新  *.abc.elven.vip ,通配符使用''
# bash alidns.sh  '*.abc'  elven.vip  192.168.18.18
##############################
# api https://help.aliyun.com/knowledge_detail/39863.html
##############################

原文地址:https://www.cnblogs.com/elvi/p/11663910.html

时间: 2024-10-13 08:12:40

阿里云DNS api接口 shell 更改DNS解析的相关文章

对接阿里云短信接口

阿里云短信服务 简单说明 之前使用过阿里的阿里大于这个短信代发服务,今天使用的是阿里云最新的一个短信代发服务,文档真的有点不详细,加上网上的博客也太少了,几经蹉跎还是把它给搓出来了,供大家学习 阿里云短信 首先没用过的玩家需要去阿里云注册账户,然后开启两个私钥,这两个密钥是我们的必需品 然后去申请签名和模版,这个也是我们的必需品 现在不怎么好申请了,建议申请理由都写成个人项目测试啥的,过不了就多申请几次,我申了三次才ojbk! 上面两个环境已经装备好了的你,怎么可以吃霸王餐呢?当然是充钱进去呀,

【课程分享】深入浅出微信公众平台实战开发(微网站、LBS云、Api接口调用、服务号高级接口)

深入浅出微信公众平台实战开发(微网站.LBS云.Api接口调用.服务号高级接口) 课程下载地址:链接:http://pan.baidu.com/share/link?shareid=2214724072&uk=3611155194 密码:glvc 一.本课程是怎么样的一门课程(全面介绍) 1.1.课程的背景 微信公众平台的火热程度已经不用多言,无论是个人还是企业,政府还是商家,都已经开始搭建微信公众平台,微信的作用已经被各界人士认可.微信公众平台的技术需求市场缺口巨大. 1.2.课程内容简介 本

THINKPHP3.2.3增加阿里云短信接口思路整理

https://help.aliyun.com/document_detail/55359.html?spm=5176.product44282.4.7.O4lc1n 阿里云短信服务地址,感冒的下载看看 1 文件存放位置的问题 阿里云的短信接口 属于第三方扩展 所以文件放在 thinkphp\vendor\ 比如起名message 把SDK的文件都存到里面 2 把实现功能的代码 写好 放在message目录 不过注意文件的路径 代码里面的文件头 引用的文件地址用类似的 require_once

阿里大于新api 接口

最近一段时间,阿里大于的功能被悄悄的合并到阿里云的短信服务下,新开通短信服务的用户将无法再使用以前阿里大于的接口进行发短信,那么,新版的短信服务到底该怎么用呢,请看这篇教程,以php为例   开通短信服务需要实名认证,如未认证请先认证,网址:https://account.console.aliyun.com/?spm=5176.sms-account.101.245.66e36218RmiLW#/auth/home   然后我们开通短信服务,传送门:https://dysms.console.

阿里云的api市场

https://help.aliyun.com/document_detail/29470.html?spm=5176.doc29473.6.564.WnY2VL https://help.aliyun.com/document_detail/29498.html?spm=5176.doc29497.6.562.RtUwGT

【阿里云IoT+YF3300】15.阿里云物联网小程序构建

2013年8月,“轻应用”概念提出,但是仅仅活跃四年随后淡出 ,直到2017年1月9号借助微信小程序成功续命.一时间,以微信小程序和支付宝小程序为代表的轻应用解决方案迅速贯穿多个环节,成为“万物互联”的雏形载体.随着物联网的发展,对数据的获取便捷度要求越来越高,硬件和场景都逐步迈入物联网时代,传统的App已经无法满足发展的需要,毕竟不可能一个场景安装一个App.YF3300,见证物联网+小程序的火花. 一.  云端配置 (1) 登陆阿里云物联网平台. (2) 在设备管理选项中创建产品 示例: (

python封装 阿里云api

最近用到阿里云的API和SDK ,用python封装了一下基础类,我只是用查询一下接口的信息,别的没有测试过,可以看看 内容如下: #-*- coding: utf-8 -*-# author: sunwei import jsonimport uuidfrom urllib import requestimport hmac,base64from hashlib import sha1from datetime import datetime, timedelta, timezone,date

开源PaaS工具CloudFoundry落地阿里云

原文:https://yq.aliyun.com/articles/292815?utm_content=m_37457 云计算技术的不断成熟和完善,尤其是IaaS平台的不断发展,使得越来越多的企业和用户青睐于将自己的业务和应用不断的从传统IT设施迁移到云上,在灵活.高效管理应用,快速扩展业务的同时不断地降低基础设施的运维和管理成本.然而,随着业务的不断发展和壮大,对IaaS资源管理成本也会不断增加,可否将基础设施的管理成本进一步降低呢?Cloud Foudry就是其中一个非常完美的解决方案,作

阿里云Windows server 2008服务器搭建VPN 图文教程,购买境外服务器自建vpn,Win8/win10 连接VPN被阻止,出现812错误解决方法

阿里云Windows server 2008服务器搭建VPN 图文教程(超详细) 第一步:购买阿里云服务器,本文使用的是Windows Server 2008 R2 企业版64位中文版 IP地址:47.88.151.129,所属节点:亚太(新加坡) 服务器配置:2核,4GB,带宽10Mbps 第二步: 打开服务器管理器,点击添加角色,如下图: 本帖隐藏的内容然后弹出如下图所示,点击下一步: 点击后,如下图,勾选网络策略和网络服务,然后点击下一步: 接着继续点击下一步,直到弹出如下图所示的页面,勾