DDNS 腾讯云解决方案-基于linux shell的动态域名解析

发布于 2020-03-13  542 次阅读


前提条件

获取解析记录
修改解析记录
定时更新任务
前提条件
已经在qcloud上注册了域名,并随意定义了域名解析地址;
拥有云API秘钥,SecretId、SecretKey;https://cloud.tencent.com/document/product/583/33449

获取配置信息

SCF CLI 可配置的内容包括默认操作地域、账号 ID、账号的 SecretID 及 SecretKey。 各个配置信息的获取位置如下:

  • 地域:产品期望所属的地域。地域列表及对应的英文写法可 点此 参阅,填写【地域】即可,无需填写可用区。
  • 账号 ID:即 APPID。通过访问控制台中的【账号中心】>【账号信息】,可以查询到您的账号 ID,请复制粘贴到记事本,稍后会用到。
  • SecretID 及 SecretKey:指云 API 的密钥 ID 和密钥 Key。您可以通过登录【访问管理控制台】,选择【云 API 密钥】>【API 密钥管理】,获取相关密钥或创建相关密钥,请复制粘贴到记事本,稍后会用到
拥有可外网访问的IP地址;
Linux可以访问外网。

获取解析记录

#!/bin/bash




domain='你的域名,例如qq.com'

subDomain='你希望解析的子域名,例如wx.qq.com,则只输入wx'

sId='你的云API秘钥SecretId'

sKey='你的云API秘钥SecretKey'

signatureMethod='HmacSHA1'

timestamp=`date +%s`

nonce=`head -200 /dev/urandom | cksum | cut -f2 -d" "`

region=bj

url="https://cns.api.qcloud.com/v2/index.php"

#获取域名解析条目ID:recordId

action='RecordList'

src=`printf "GETcns.api.qcloud.com/v2/index.php?Action=%s&Nonce=%s&Region=%s&SecretId=%s&SignatureMethod=%s&Timestamp=%s&domain=%s" $action $nonce $region $sId $signatureMethod $timestamp $domain`

#echo 'src: ' $src

signature=`echo -n $src|openssl dgst -sha1 -hmac $sKey -binary |base64`

#echo 'signature: ' $signature

params=`printf "Action=%s&domain=%s&Nonce=%s&Region=%s&SecretId=%s&Signature=%s&SignatureMethod=%s&Timestamp=%s" $action $domain $nonce $region $sId "$signature" $signatureMethod $timestamp `

#echo 'params: ' $params

curl -G -d "$params" --data-urlencode "Signature=$signature" "$url" > 1.txt
cat 1.txt
echo '名解析条目ID:recordId'
sed "s/records\"\:\[{/\n/g" 1.txt | grep '^"id' | sed 's/{"id"/\n"id"/g' | grep ${subDomain} | awk -F':|,' '{print$2}'

 

修改解析记录

#!/bin/bash

#/usr/bin/ddns

recordId='根据上面返回结果,手工填入,好像是几位数字'

domain='你的域名,例如qq.com'

subDomain='你希望解析的子域名,例如wx.qq.com,则只输入wx'

sId='你的云API秘钥SecretId'

sKey='你的云API秘钥SecretKey'

signatureMethod='HmacSHA1'

timestamp=`date +%s`

nonce=`head -200 /dev/urandom | cksum | cut -f2 -d" "`

region=bj

url="https://cns.api.qcloud.com/v2/index.php"

#获取ip

#ip=`curl http://2019.ip138.com/ic.asp >/dev/null|iconv -fgb2312 -t utf-8 |sed 's/.*\[\(.*\)\].*/\1/g'`
#上面自动获取的网址已经失效,结果等同于,需要解析到的域名,如下
ip=XX.XX.XX.XX

action='RecordModify'

recordType='A'

recordLine='默认'

value=$ip

timestamp=`date +%s`

nonce=`head -200 /dev/urandom | cksum | cut -f2 -d" "`




src=`printf "GETcns.api.qcloud.com/v2/index.php?Action=%s&Nonce=%s&Region=%s&SecretId=%s&SignatureMethod=%s&Timestamp=%s&domain=%s&recordId=%s&recordLine=%s&recordType=%s&subDomain=%s&value=%s" $action $nonce $region $sId $signatureMethod $timestamp $domain $recordId $recordLine $recordType $subDomain $value`




#echo 'src: ' $src

signature=`echo -n $src|openssl dgst -sha1 -hmac $sKey -binary |base64`

#echo 'signature: ' $signature




params=`printf "Action=%s&Nonce=%s&Region=%s&SecretId=%s&SignatureMethod=%s&Timestamp=%s&domain=%s&recordId=%s&recordLine=%s&recordType=%s&subDomain=%s&value=%s" $action $nonce $region $sId $signatureMethod $timestamp $domain $recordId $recordLine $recordType $subDomain $value`




#echo 'params: ' $params




curl -G -d "$params" --data-urlencode "Signature=$signature" "$url"
原文链接:https://blog.csdn.net/dragon2k/article/details/88016755
action:其他类型:https://cloud.tencent.com/document/product/302/8514

添加记录:Action=RecordCreate
修改状态:Action=RecordStatus
修改记录:Action=RecordModify
获取列表:Action=RecordList
删除记录:Action=RecordDelete