通过 ssh 的 TCP 转发安全发送邮件

学校的 Web Mail 和 smtp 服务器是同一台机器,被配置成只允许它自己连接自己的 smtp 服务器,其他的机器如果连接它的 25 端口企图发送邮件的话,将会被拒绝。因此,只能使用 Web Mail 发信,而无法通过邮件客户端(例如 outlook,sylpheed 等)来发信,所以总感觉不是很方便。

虽然有服务器的管理员帐号,但是又不能乱改邮件服务器配置,怕万一搞出个什么漏洞来就不好了。今天读 debian 参考手册时发现,用 ssh 的 TCP 转发功能可以很轻松的实现本机通过邮件客户端安全发信。具体方法也很简单。

只要执行

sudo ssh -f -L 25:email-server:25 root@email-server tail -f /etc/motd

就可以了,现在只要把邮件客户端里的 smtp 服务器设置成 localhost,端口是 25,就通过邮件客户端发送邮件了。当然这里有个前提,就是邮件服务器的 /etc/ssh/sshd_config 中设置了 AllowTcpForwarding 值为 yes。

但每次手动执行这条语句还是很麻烦,所以我把这句加到 ~/.bash_profile 中了。这样每次登录,它就会自动执行。

但是另一个麻烦就是,当用 exit 退出终端,这个 ssh 连接不会断开,下次再登录时,就会产生冲突的错误信息,并且又建立一个 ssh 连接。如果登录次数多了,就会建立许多无用的 ssh 连接,白白的消耗资源。因此我在上面那条建立连接的语句上面加了一条 killall 的语句,变成下面这样子:

sudo ssh root@email-server killall tail 2&>/dev/null
sudo ssh -f -L 25:email-server:25 root@email-server tail -f /etc/motd

这样就可以在建立连接前,把原来的连接给释放掉了(如果有的话)。之所以写在它前面,而不是写在 .bash_logout 文件中,是因为可能会同时登录几个终端,这样在同时登录时也不会冲突,在某个终端退出时,也不会影响其他终端使用已经建立的连接。

那,现在基本上很方便了。还有一点小麻烦就是登录时除了输入本机的当前帐号的密码,还要输入一边远程服务器的密码。如果这一步也能省了就好了。这个也好办,参照 Debian 参考手册中的 9.5.3 用更少的密码建立连接 – RSA 一节就可以了。这里就不在重复说了。

标签: Linux, Mail

« 上一篇 | 下一篇 »

只显示10条记录相关文章

发表评论

评论 (必须):