shell脚本动态域名解析阿里云

下面是一个利用Shell脚本调用阿里云DNS API实现动态域名解析(DDNS)的示例。该方案适用于家庭宽带等动态公网IP环境,主要依赖阿里云的域名解析API。

🖥️ 阿里云DDNS Shell脚本示例

#!/bin/bash# 阿里云DDNS动态域名解析脚本
# 使用方法:1. 修改下方配置项 2. 设置为定时任务(如每10分钟执行一次)# 配置区域 - 开始
# 阿里云AccessKey (建议使用子账户的RAM权限)
AccessKeyId="你的AccessKeyId"
AccessKeySecret="你的AccessKeySecret"# 域名配置
DomainName="example.com"     # 主域名
SubDomain="www"              # 子域名前缀 (如www对应www.example.com)
TTL="600"                    # TTL缓存时间(秒),免费版最低600# 获取本机公网IP的方式
GetIPCommand="curl -s whatismyip.akamai.com"
# 配置区域 - 结束# 函数:获取当前域名解析IP
get_dns_ip() {local domain=$1nslookup $domain 223.5.5.5 2>/dev/null | grep 'Address:' | tail -n1 | awk '{print $NF}'
}# 函数:URL编码
urlencode() {out=""while read -n1 c; docase $c in[a-zA-Z0-9._-]) out="$out$c" ;;*) out="$out$(printf '%%%02X' "'$c")" ;;esacdoneecho -n $out
}# 函数:发送API请求
send_request() {local args="AccessKeyId=$AccessKeyId&Action=$1&Format=json&$2&Version=2015-01-09"local hash=$(echo -n "GET&%2F&$(echo "$args" | urlencode)" | openssl dgst -sha1 -hmac "$AccessKeySecret&" -binary | openssl base64)curl -s "http://alidns.aliyuncs.com/?$args&Signature=$(echo "$hash" | urlencode)"
}# 函数:获取RecordId
get_record_id() {send_request "DescribeSubDomainRecords" "SignatureMethod=HMAC-SHA1&SignatureNonce=$RANDOM&SignatureVersion=1.0&SubDomain=$FullDomain&Timestamp=$(date -u +%Y-%m-%dT%H:%M:%SZ | urlencode)"
}# 函数:更新解析记录
update_dns() {local record_id=$1local new_ip=$2send_request "UpdateDomainRecord" "RR=$SubDomain&RecordId=$record_id&SignatureMethod=HMAC-SHA1&SignatureNonce=$RANDOM&SignatureVersion=1.0&TTL=$TTL&Timestamp=$(date -u +%Y-%m-%dT%H:%M:%SZ | urlencode)&Type=A&Value=$new_ip"
}# 主程序
echo "[$(date '+%Y/%m/%d %H:%M:%S')] DDNS检查开始"# 获取当前公网IP
CurrentIP=$($GetIPCommand)
if [ -z "$CurrentIP" ]; thenecho "错误:无法获取公网IP"exit 1
fiFullDomain="$SubDomain.$DomainName"# 获取当前DNS解析IP
DNS_IP=$(get_dns_ip $FullDomain)if [ "$CurrentIP" = "$DNS_IP" ]; thenecho "IP未变化 ($CurrentIP),无需更新"exit 0
fiecho "检测到IP变化: 本地IP=$CurrentIP, DNS记录=$DNS_IP"# 获取RecordId并更新
RecordResponse=$(get_record_id)
RecordId=$(echo "$RecordResponse" | grep -o '"RecordId":"[^"]*' | cut -d'"' -f4)if [ -n "$RecordId" ]; thenUpdateResult=$(update_dns $RecordId $CurrentIP)if echo "$UpdateResult" | grep -q "RecordId"; thenecho "DDNS更新成功: $FullDomain -> $CurrentIP"elseecho "DDNS更新失败: $UpdateResult"fi
elseecho "错误:无法获取RecordId"
fi

🔧 使用前配置

  1. 阿里云AccessKey配置

    • 登录阿里云控制台 → 访问控制RAM → 创建子账户(推荐)或使用主账户
    • 授权策略:AliyunDNSFullAccess
    • 获取AccessKey ID和Secret
  2. 域名准备

    • 在阿里云域名控制台添加A记录
    • 记录类型:A
    • 主机记录:按需填写(如www)
    • 记录值可先随意填写,脚本运行后会自动更新

⚙️ 部署与自动化

  1. 保存脚本

    # 将脚本保存为 aliddns.sh
    chmod +x aliddns.sh
    
  2. 配置定时任务

    # 编辑crontab (每20分钟执行一次)
    crontab -e
    # 添加以下行:
    */20 * * * * /path/to/your/aliyun-ddns.sh >> /path/to/your/ddns.log 2>&1
    

📌 注意事项

  • IP获取服务:示例使用了whatismyip.akamai.com,若需要可替换为其他IP查询服务
  • 脚本兼容性:确保系统已安装curlopenssl等基础工具
  • 安全提醒:妥善保管AccessKey,建议使用RAM子账户并授予最小必要权限
  • 调试技巧:首次运行可手动执行脚本,观察输出信息

💡 扩展功能

如需更完善的功能(如IPv6支持、微信通知等),可参考开源项目如risfeng/aliyun-ddns-shell,它提供了更完整的实现方案。

希望这个脚本能帮助您轻松实现动态域名解析。如果有任何问题,欢迎继续交流!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/921978.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聪明的wyk

王俞宽是个人物

Windows下进程和账户权限

一、Windows 进程创建的底层流程(六阶段深度解析) 进程创建是用户态 API 触发、内核态资源分配、子系统协同的复杂过程,核心依赖CreateProcess系列函数(实际为宏定义,映射到CreateProcessA/W),具体分为六个阶段…

论状压记忆化搜索

其实非常简单,甚至比递推写法简单 比如P2704,递推做这个比较麻烦,但状压记搜强大 #include<bits/stdc++.h> #include<bits/extc++.h> using namespace std; using namespace __gnu_cxx; using namespac…

做微视频的网站组工网站建设方案

二、学习回归 1. y y y与 f θ ( x ) f_\theta(x) fθ​(x) y y y 是实际数据x对应的值 f θ ( x ) f_\theta(x) fθ​(x)是我们构造出来的函数&#xff0c;例如 f θ ( x ) θ 0 θ 1 x f_\theta(x) \theta_0 \theta_1 x fθ​(x)θ0​θ1​x 所以我们希望这两个越接近&…

Spring Gateway动态路由实现方案 - 详解

Spring Gateway动态路由实现方案 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mo…

postman使用总结 - 详解

postman使用总结 - 详解2025-09-29 16:09 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; fon…

Nordic 高性能无线SoC nRF54LM20A,专为低功耗蓝牙与Matter设计

Nordic 宣布推出新一代nRF54L系列超低功耗无线系统级芯片 (SoC)的最新成员nRF54LM20A。nRF54L系列基于Nordic创新的22nm技术平台,不仅简化设计挑战,同时实现了可靠通信、更长的电池寿命和紧凑的产品设计。 Nordic 短…

调用setState 之后发生了什么?

触发状态更新 当你在组件里调用: this.setState({ count: this.state.count + 1 });React 并不会马上修改 this.state,而是 把更新请求放到一个队列中(即所谓的异步/批量更新机制)。 合并新旧状态React 会将你传入…

网站建设考虑哪些因素沈阳妇科医院排名前十名

在线预览|GB/T 41510-2022http://c.gb688.cn/bzgk/gb/showGb?typeonline&hcno696806EC48F4105CEF7479EB32C80C9E 知识点&#xff1a; 安全等级定义&#xff0c;设计寿命&#xff0c;剩余寿命&#xff0c;使用寿命。 标准附录有应力的具体解算演示。

湖北专业网站建设市面价wordpress格子主题

A. Submission Bait&#xff08;博弈&#xff09; 题意&#xff1a;爱丽丝和鲍勃在大小为n的数组a中进行游戏&#xff0c;他们轮流进行运算&#xff0c;爱丽丝先开始&#xff0c;不能运算的一方输&#xff0c;一开始mx0&#xff0c;每次操作&#xff0c;玩家可以选择一个牵引i…

连云港做网站公司建设网站的网站空间

JAVA&#xff1a;线程总结 目录 目录 JAVA&#xff1a;线程总结 JAVA&#xff1a;线程总结 01_多线程(多线程的引入)(了解) 02_多线程(多线程并行和并发的区别)(了解) 03_多线程(Java程序运行原理和JVM的启动是多线程的吗)(了解) 04_多线程(多线程程序实现的方式1)(掌握…

做网站开发 甲方提供资料网站建设特定开发

如果能用python代替Javascript编写基于浏览器的应用&#xff0c;该有多好啊。但是&#xff0c;Javascript是唯一一种能在浏览器里执行的语言(Flash或Silverlight除外)。换个思路&#xff0c;先用Python编写代码&#xff0c;然后在通过编译器转为为Javascript脚本&#xff0c;这…

黄金分割比

不会初中数学…… 定义:将线段分为两部分,满足较大部分(a)与整体(a+b)的比值等于较小部分(b)与较大部分的比值,即 \(\frac{a}{a+b} = \frac{b}{a}(a > b)\)。 \(a^2 = ab + b^2 \Rightarrow \frac{b^2}{a^…

how create rhel8 local repository server

Repository Server ConfigurationMount DVD.iso. Create DVD repo. [BaseOS] name=DVD_BaseOS enabled=1 gpgcheck=0 baseurl=file:///mnt/BaseOS [AppStream] name=DVD_AppStream enabled=1 gpgcheck=0 baseurl=file:…

对称加密和非对称加密原理对比

I will use the web search tool to find detailed explanations about the differences between asymmetric and symmetric encryption, including principles and specific cases. It seems the initial search didn…

借助Aspose.Email,使用 Python 读取 Outlook MSG 文件

Aspose.Email是一款企业级解决方案,可自动处理和转换电子邮件文件。无需Microsoft Outlook,以编程方式创建、读取和转换电子邮件文件格式。本指南将向您展示如何借助Aspose.Email使用Python读取 Outlook MSG文件。As…

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.B)- FlexSPI NOR连接方式大全(RT1180)

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MXRT1180的FlexSPI NOR启动的连接方式。这个 i.MXRT FlexSPI NOR 启动连接方式系列文章,痞子衡已经写过很多篇,把已面世的所有 i.MXRT 型…

文件同步工具深度测评(2025版):同步盘夺冠

为解决微信文件传输助手传输慢、无断点续传及数据安全风险等痛点,本文提供了坚果云同步盘解决方案。它凭借增量同步、全链路加密与断点续传技术,实现大文件安全、高效的多端同步与团队协作,是替代传统传输方式、升级…