2025-06-03 04:26:01
03 06 2025
摘要:使用bash脚本生成签名的url实现腾讯云的动态ip地址的域名绑定

一、下面介绍使用linux脚本bash实现动态ip地址域名的绑定

   1、下面创建一个通用bash脚本名字叫dnspod.sh,下面是脚本的相关内容:

#!/bin/bash
#url编码函数 urlencode() {    curl -Gso /dev/null -w %{url_effective} --data-urlencode "data=$1" "0.0.0.0" | sed -n "s/.*=//p" }

#这个函数用来生成v1的签名 function sign(){    #echo $2    keys=""    args=$1    for i in "${!args[@]}"    do       if [ "$i" != "0" ]       then          keys="${keys}\n$i"       fi    done    #这里对key进行( ASCII 码)升序排序    keys=$( echo -ne ${keys#\\n} | sort)    str="GETdnspod.tencentcloudapi.com/?"    for i in ${keys}    do       str="${str}$i=${args[$i]}&"    done    #首先使用 HMAC-SHA1 算法对上一步中获得的签名原文字符串进行签名,然后将生成的签名串使用 Base64 进行编码,即可获得最终的签名串。
   echo -n ${str%&} | openssl dgst -sha1 -hmac "$2" -binary | base64 }
#这个函数用来生成请求接口的url function genurl(){    url="https://dnspod.tencentcloudapi.com/?"    keys=""    args=$1    for i in "${!args[@]}"    do       if [ "$i" != "0" ]       then          keys="${keys}\n$i"       fi    done    keys=$( echo -ne ${keys#\\n} | sort)    for i in ${keys}    do       url="${url}${i}=$(urlencode ${args[$i]})&"    done    echo ${url%&} } #获取脚本调用的参数个数 inlen=${#@}
#参数个数至少6个,是键值对方式 if [ $inlen -lt 6 ] then    echo "请输入参数如:Action DescribeRecordList SecretId secretidvalue SecretKey SecretKeyValue" exit 1 fi inargs=("${@}")
#声明一个map来保存键值对 declare -A params=() for((i=0;i<$inlen;i+=2)) do    params[${inargs[$i]}]="${inargs[$((i+1))]}" done #判断必要的参数Action是否存在,不存在输出提示后,结束脚本 if [ ! -v params['Action'] ] then    echo '请输入参数Action 和Action的值'    exit 1 fi
#判断必要的参数SecretId是否存在,不存在输出提示后,结束脚本 if [ ! -v params['SecretId'] ] then    echo '请输入参数SecretId和SecretId的值'    exit 1 fi
#判断必要的参数SecretKey是否存在,不存在输出提示后,结束脚本 if [ ! -v params['SecretKey'] ] then    echo '请输入参数SecretKey和SecretKeyValue的值'    exit 1 fi #赋值公共参数Nonce Nonce=$(date +%s) Nonce=${Nonce:4:6}

#定义一个map对象args,并初始化一些公共参数的值 declare -A args=(["Version"]="2021-03-23"      ["Timestamp"]="$(date +%s)"    ["Nonce"]="${Nonce}"    ["Region"]="ap-guangzhou" ) #循环把脚本传入的一些相关参数复制给args对象 for(( i=0;i<$inlen;i+=2)) do
   #排除“SecretKey”属性的赋值    if [ "${inargs[$i]}" != "SecretKey" ]    then       k=$((i+1))       args["${inargs[$i]}"]="${inargs[$k]}"    fi done #调用函数sign输出的值赋给sxx变量 sxx=$(sign "${args}" "${params['SecretKey']}")
#把生成的签名值赋值给args对象 args["Signature"]=$sxx
#调用genurl函数生成请求的url地址,并且复制给url变量 url=$(genurl "$args")
#调用curl发起接口的请求 curl -k -X 'GET' "$url"

   2、赋予脚本可执行权限

    chmod 755 dnspod.sh

   3、调用dnspod.sh脚本执行“获取域名的解析记录列表”看是否起效

   ./dnspod.sh Action DescribeRecordList SecretId "xxxxxx" SecretKey "xxxx2222"  Domain love2where.com # 其中的xxxxx的值登录腾讯云控制台获取,成功将返回love2where.com下的所有解析

   4、调用dnspod.sh脚本来添加test.love2where.com记录

    ./dnspod.sh Action CreateRecord SecretId "xxxxxx" SecretKey "xxxx2222"  Domain love2where.com \

    RecordType "A" \ #ipv4是A ,ipv6是AAAA

    RecordLine "默认"\

    Value "192.168.1.1"

   5、完毕

 

     

延伸阅读
  1. 上一篇:JDK
  2. 下一篇:Nginx
发表评论