和计算机打交道的人,有时候需要长期远程访问某台机器,但是由于经费或者其它原因,这台机器没有固定IP.这种情况下IP的变化就会给使用者带来困扰,尤其是出差的时候.
下面方法的主要思想是:机器定时向使用者发送邮件并告知本机IP地址,算是一种常用的方式.该方法在ubuntu 14.04上测试有效.
1.安装mutt和msmtp
sudo apt-get install mutt msmtp
遇到提示,直接回车即可.
下面的命令除非单独提示,请在root权限下执行.配置文件中各参数含义请自行查阅.
2.配置mutt
mutt的配置文件默认目录为:/etc/Muttrc, 在该文件末尾加上如下配置:
set sendmail="/usr/bin/msmtp" set use_from=yes set realname="ubuntu5" set editor="vim" set copy=no
3.配置msmtp
msmtp的配置文件需自己新建,默认目录为/etc/msmtprc,其中的内容如下:
account default host smtp.qq.com from ***@qq.com auth plain user ***@qq.com password *** auth on tls on tls_trust_file /etc/ssl/certs/ca-certificates.crt logfile /etc/log_ms.log
其中, from和user是相同的,均为发送账号,这里以QQ邮箱为例,host要与邮箱对应;password在这里并不是直接的邮箱密码,而是QQ邮箱设置中,开通POP3/SMTP和IMAP/SMTP两个服务时生成的授权码,具体邮箱可能有所不同.tls_trust_file是tls证书,可以用下面命令查看是否安装:
dpkg -l | grep ca-certificates
logfile可以自定义,但是文件夹需要存在.
4.定义发送邮件的脚本
该脚本可以自定义文件夹放置,这里只是方便说明,直接放在/etc下,新建send_ip.sh,内容如下:
#!/bin/bash
# check network availability
while true
do
TIMEOUT=5
SITE_TO_CHECK="http://www.baidu.com"
RET_CODE=`curl -I -s --connect-timeout $TIMEOUT $SITE_TO_CHECK -w %{http_code} | tail -n1`
if [ "x$RET_CODE" = "x200" ]; then
echo "Network OK, will send mail..."
break
else
echo "Network not ready, wait..."
sleep 1s
fi
done
# get the IP address of ppp0
WLAN0_IP_ADDR=`/sbin/ifconfig ppp0 | sed -n "2,2p" | awk '{print substr($2,1)}'`
# send the Email
echo "Current time: `date '+%F %T'`. Enjoy your Computer." | mutt -s "IP Address is: $WLAN0_IP_ADDR" ***@qq.com这里的***@qq.com是信息接收邮箱.为该文件增加执行权限:
chmod u+x send_ip.sh
5.设置定时器
在/etc下新建send_ip.crontab文件,内容如下:
0 */12 * * * /etc/send_ip.sh
表示每个12个小时自动执行一次脚本,其它的crontab时间设置请自查.
执行如下命令设置crontab的定时任务:
crontab send_ip.crontab
设置完成后,用crontab -l查看任务时候存在.最后,退出root,重启cron服务:
sudo service cron restart
主要步骤到这里就完成了,调试时可以先将发送的时间设置为1min一次,成功后再改回来.
注意,上面的邮件发送日志需要修改rsyslog文件,具体就是将/etc/rsyslog.d/50-default.conf文件中cron.*前面的#删掉.
6.开机执行并启动
添加一条执行脚本到/etc/rc.local就行.
参考:http://www.gkbusy.iteye.com/blog/1782703
Ubuntu动态公网IP远程访问的解决策略