每次全局 ip 更改时发送电子邮件的服务器脚本

Alv*_*var 8 server email dynamic-ip

我正在设置一个没有静态全局 IP 的 Web 服务器。它将在我父母的家里,当全局 IP 更改时,我将无法通过 SSH 访问它。每次重新启动路由器时,全局 IP 都会更改,就像每月发生一次一样。

我需要一个脚本,每次全局 IP 更改时都会向我发送电子邮件。这样我就可以更新 DNS,这样我的网站就可以重新运行了。

我对 Ubuntu 中的脚本一无所知,但我知道 Java 和 PHP 的基础知识。

计算机:Ubuntu 13.10 服务器,iMac G4 Globe。

AnF*_*nFi 7

您是否考虑过使用动态 DNS 更新脚本/工具?

例如ddclient作为 Debian/Ubuntu 软件包提供。

它可以更新您的 DNS 区域更新您的动态 DNS 记录(以便您可以通过 ssh 登录)并执行自定义脚本以向您发送电子邮件。


小智 6

根据此答案中的代码,我修改并添加了更多调试选项。

我必须设置电子邮件服务器并使用crontab -e它来通过电子邮件发送我当前的 IP 地址。您还需要使脚本文件可执行,并确保您的用户对放置脚本的文件夹具有读写权限。

#!/bin/bash
NOWIPADDR="/home/scripts/nowipaddr"
GETIPADDR="dig +short myip.opendns.com @resolver1.opendns.com"
LOG="/home/scripts/ip.log"
timestamp=$( date +%T )
curDate=$( date +"%m-%d-%y" )

if [ -f $NOWIPADDR ]; then
  if [[ `$GETIPADDR` = $(< $NOWIPADDR) ]]; then
    echo $curDate $timestamp " IP address check: " $(< $NOWIPADDR) >> $LOG
  else
    $GETIPADDR > $NOWIPADDR
    mail -s "Server IP" email@gmail.com < $NOWIPADDR
  fi
else
  $GETIPADDR > $NOWIPADDR
  mail -s "Server IP" email@gmail.com < $NOWIPADDR
fi
Run Code Online (Sandbox Code Playgroud)


小智 4

您可以编写一个简单的脚本,在每天的特定时间从 cron 运行。

获取文件中的现有 ip,然后运行 ​​if 循环来检查新 ip 与现有 ip,如果两个 ip 保持相同,则可以跳过发送邮件。否则,如果 IP 发生变化,它应该使用新的 IP 发送邮件。

您可以每小时、每天、每周运行该脚本。

NOWIPADDR="nowipaddr"
GETIPADDR="ifconfig.me"


    if [ -f $NOWIPADDR ]
    then
       if [ `cat $NOWIPADDR` = `curl $GETIPADDR` ]
       then
           echo "no change in IP."
       else
           curl $GETIPADDR > $NOWIPADDR
           mail -s "IP is $GETIPADDR" yourmailadd@gmail.com
        fi
    else
        curl $GETIPADDR >> $NOWIPADDR
    fi
Run Code Online (Sandbox Code Playgroud)