Серверный скрипт, который отправляет электронное письмо каждый раз, когда меняется глобальный ip
Я настраиваю веб-сервер, который не будет иметь статический глобальный IP-адрес. Он будет в доме моих родителей, и я не смогу подключиться к нему по SSH, когда изменится глобальная ИС. Глобальный IP-адрес будет меняться при каждом перезапуске маршрутизатора, что происходит один раз в месяц.
Мне нужен скрипт, который отправляет мне электронное письмо каждый раз, когда меняется глобальный IP-адрес. Так что я могу обновить DNS, чтобы мой сайт снова работал.
Я ничего не знаю о скриптах в Ubuntu, но я знаю основы Java и PHP.
Компьютер: сервер Ubuntu 13.10, iMac G4 Globe.
6 ответов
Рассматривали ли вы использовать динамический сценарий / инструмент обновления DNS?
например, ddclient доступен в виде пакета Debian/Ubuntu.
Он может обновить вашу DNS-зону ИЛИ обновить вашу динамическую DNS-запись (чтобы вы могли войти в ssh) и выполнить собственный скрипт для отправки вам электронной почты.
Основываясь на коде из этого ответа, я изменил и добавил еще несколько опций для отладки.
Я должен был настроить почтовый сервер и пользователя 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
curl $GETIPADDR > $NOWIPADDR
mail -s "Server IP" email@gmail.com < $NOWIPADDR
fi
Вы можете написать простой скрипт для запуска из 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
$GETIPADDR > $NOWIPADDR
mail -s "IP is $GETIPADDR" yourmailadd@gmail.com
fi
else
curl $GETIPADDR >> $NOWIPADDR
fi
Я использую это для проверки моего IP-адреса один раз в день.
wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//' > ~/myip
Если у вас есть Linux-компьютер со статическим IP-адресом, я бы сказал, что просто скопируйте файл ~/myip там.
Если это не так, вы всегда можете использовать удобный инструмент командной строки под названием sendEmail (не путать с sendmail). Этот инструмент позволяет очень легко отправить электронное письмо с помощью однострочной команды. http://caspian.dotconf.net/menu/Software/SendEmail/
Вы могли бы написать что-то вроде этого:
myip=`wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'`<br>
sendEmail -f you@yourmail.com -m $myip
Немного старый поток, но он занимает довольно высокое место в списке, когда вы ищете в Google, как отслеживать внешние изменения IP.
В качестве альтернативы, которая может вам помочь, я написал скрипт на python, предназначенный для отслеживания изменений внешних IP-адресов. В настоящее время он сохраняет "текущий" внешний IP-адрес в файл и при запуске захватывает новый IP-адрес, а затем сравнивает его со старым. Это дизайн, чтобы отправить вам электронное письмо в случае обнаружения изменений.
Он предназначен для запуска в качестве cronjob и не работает как фоновый демон самостоятельно.
Вот ссылка на репозиторий github: https://github.com/begleysm/ipwatch
Надеюсь, это поможет!
Это то, что я использовал, настроил свой сервер для отправки электронных писем с обновленным (и прежним) IP-адресом, используя мою учетную запись gmail, установив постфикс по этой ссылке. Запуск Ubuntu 22.04 ARM.
Сначала запустите эту команду, чтобы сохранить текущий IP-адрес в файл.
wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//' > ~/myip
Следующее теперь будет сохранено в файл *.sh, который вы можете вызывать cron так часто, как это необходимо.
# retrieve last saved IP address
NOWIPADDR=$( cat ~/myip )
# check current IP and save in temp
wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//' > ~/myiptemp
GETIPADDR=$( cat ~/myiptemp )
# check if there have been changes
if [ $NOWIPADDR == $GETIPADDR ]
then
# if there were no changes do nothing
echo "No change in IP."
else
# if there were changes, save new IP and send out email informing of such
OLDIP=$NOWIPADDR
wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//' > ~/myip
NOWIPADDR=$( cat ~/myip )
echo "IP has changed."
echo "Your IP has changed from $OLDIP to $NOWIPADDR" | mail -s "IP has Changed on Server" youremail@gmail.com
fi
# lastly, delete the temp ipfile
rm ~/myiptemp