开发者用 curl ifconfig.me 批量获取多服务器公网 IP 的脚本写法

2025-07-21 0 109 百度已收录

是不是管理十几台服务器时,想查它们的公网 IP,得一台台登录输 “curl ifconfig.me”,手都敲酸了?小编上周帮做分布式部署的王工弄,他管着 20 台云服务器,每台查一遍花了 40 分钟,还记错了两台的 IP。其实啊,写个简单脚本就能让电脑自己跑,几分钟搞定所有服务器的 IP 查询,今天就把具体写法、能省多少事、用户们改出来的实用版本,全说明白,开发者跟着复制粘贴,不用再手动敲命令了。

一、基础版脚本:3 行核心代码,新手也能看懂

别被 “脚本” 俩字吓住,这脚本就是让电脑按顺序登录服务器,自动输命令,再把结果记下来,用 Bash 写的,Linux 服务器上直接能跑。
开发者用 curl ifconfig.me 批量获取多服务器公网 IP 的脚本写法

  1. 先准备服务器列表:新建个文本文件,起名 “servers.txt”,里面写服务器的登录信息,格式是 “用户名 @IP 地址”,比如 “root@112.113.114.1”“admin@123.124.125.2”,每行一个,保存好。王工就是这么做的,把 20 台服务器信息全列进去,不用再记 IP 了。
  2. 脚本代码长这样,复制就能用
    plaintext
    #!/bin/bash
    while read server; do
      echo "服务器 $server 的公网IP:" >> ip_result.txt
      ssh $server "curl -s ifconfig.me" >> ip_result.txt
      echo "-------------------------" >> ip_result.txt
    done < servers.txt
    

    第一行告诉系统用 Bash 执行,第二行到第四行是循环:从 servers.txt 里读服务器信息,登录后执行 “curl -s ifconfig.me”(-s 是不显示多余信息),结果存到 ip_result.txt 里,每台服务器之间加横线分开。

  3. 给脚本加权限,跑起来:终端里输 “chmod +x get_ips.sh”(给脚本权限),再输 “./get_ips.sh”,然后按提示输每台服务器的密码(要是设了密钥登录,连密码都不用输)。王工第一次跑的时候,看着终端自动跳出一行行 IP,直说 “这比手动快 10 倍”。


二、进阶版脚本:加个超时和错误提示,不怕服务器没响应

基础版遇到服务器没开、密码错了,会卡住半天,这个版本能跳过没响应的服务器,还会记下来哪台出问题了。

  1. 带错误处理的脚本,这样写
    plaintext
    #!/bin/bash
    while read server; do
      echo "正在查询 $server ..."
      # 超时5秒,失败就记错误
      ssh -o ConnectTimeout=5 $server "curl -s --max-time 3 ifconfig.me" > temp_ip.txt
      if [ $? -eq 0 ]; then
        ip=$(cat temp_ip.txt)
        echo "$server 公网IP:$ip" >> ip_result.txt
      else
        echo "$server 连接失败或超时" >> ip_error.txt
      fi
    done < servers.txt
    rm -f temp_ip.txt  # 删临时文件
    

    开发者用 curl ifconfig.me 批量获取多服务器公网 IP 的脚本写法
    加了 “-o ConnectTimeout=5”(5 秒连不上就放弃)、“–max-time 3”(curl 命令 3 秒没结果就停),还会把成功的 IP 和失败的服务器分开记,王工改了这个版本后,再也不用守着终端看进度了。

  2. 用户 “运维老周” 改的版本,更贴心:他在脚本里加了时间戳,每次查询都记上 “2024-05-20 14:30:00 查询成功”,方便以后对账;还加了 “echo” 提示,终端里会显示 “查询完成,结果在 ip_result.txt”,新手不容易懵。


三、实用技巧:让脚本更好用的 3 个小改动

别满足于能跑就行,这几个改动能解决实际问题,用户们亲测有效:

  1. 不用输密码!配个密钥登录:每次输密码太烦,在本地终端输 “ssh-keygen” 生成密钥,再用 “ssh-copy-id 用户名 @服务器 IP” 把公钥传到服务器,以后脚本登录不用输密码,王工配完后,20 台服务器查下来全程不用动手。
  2. 定时自动查!每天早上 8 点给你发结果:终端输 “crontab -e”,加一行 “0 8 * * * /root/get_ips.sh && mail -s “服务器 IP 列表” your@email.com < ip_result.txt”,每天早上 8 点自动跑脚本,结果发到你邮箱。做电商的张姐就这么弄,大促前每天看一眼 IP 有没有变,踏实。
  3. 换个命令备用!ifconfig.me 挂了也不怕:把脚本里的 “curl -s ifconfig.me” 换成 “curl -s icanhazip.com” 或 “curl -s ip.cn”,这俩和 ifconfig.me 功能一样,万一某个网站维护,换个命令照样用。网友 “开发小吴” 就遇到过 ifconfig.me 打不开,换了icanhazip.com立马好使。


四、自问自答:写脚本时最容易卡壳的 2 个问题

问:服务器登录用户名不一样,脚本里怎么处理?
答:servers.txt 里写成 “用户名 @IP” 就行,比如一台是 “root@1.1.1.1”,另一台是 “ubuntu@2.2.2.2”,脚本会按不同用户名登录,王工就是这么管混合系统的服务器的。
问:脚本跑一半卡住了,怎么停?
答:按 “Ctrl+C” 就能停,要是生成了 ip_result.txt,里面会有已经查完的结果,不会白跑。建议先拿两三台服务器测试脚本,没问题了再跑所有的。


五、小编的实在建议

这脚本看着简单,却能解决多服务器管理的大麻烦。王工算过,20 台服务器,手动查要 40 分钟,用脚本 5 分钟搞定,还不会记错。新手别觉得写脚本难,先复制基础版试试,改改服务器列表就行,熟了再加错误处理、定时任务。
其实啊,服务器管理里这种 “偷懒” 的脚本还有很多,比如批量部署软件、批量查磁盘空间,原理都差不多,学会这个,以后能举一反三。你要是改出了更好用的版本,欢迎在评论区分享,让大家都省点事~

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

兔格号 SEO运维 开发者用 curl ifconfig.me 批量获取多服务器公网 IP 的脚本写法 https://www.tglzm.com/seo/wei-seo/3104.html

一个独行者,独揽万古

常见问题

相关文章

评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务