电子邮件作为系统控制台。第一部分

作者:Michael Schwarz

E-mail as a System Console. Part I

编者注:以下章节摘自 Michael Schwarz、Jeremy Anderson、Peter Curtis 和 Steven Murphy 合著的《Multitool Linux》一书。请访问本书网站获取链接、更新和勘误表。

问题:当我在 1) 工作场所,只能通过工作站发送电子邮件的防火墙之后,或者 2) 出差在外,酒店防火墙只允许我浏览网页时,我该如何访问我的家用 Linux 系统?

答案:创建一个基于电子邮件的控制台应用程序,让您可以通过电子邮件执行命令并返回结果。如果您只能访问网络,请在某处获取一个网络电子邮件帐户,并使用它通过电子邮件向您家中的系统发送命令。当正常的通信方式(Telnet、ssh、FTP 等)不可用时,电子邮件控制台是与您的系统通信的一种好方法。

您是否曾经在工作时希望可以在您的家用 Linux 系统上执行命令来查找一些信息?我有过,而且我敢肯定您也能找到很多您也想这样做的理由。电子邮件简单而强大。但是它可以作为您家用 Linux 系统的控制台吗?当然可以!我一直都在使用它。

但是为什么不以传统方式登录并执行命令呢?当然,我可以这样做,但这会很无趣。此外,有时无法直接访问系统。但是,如果电子邮件可用,那么这个电子邮件控制台应用程序将对您有效。首先,我将告诉您我是如何开始开发电子邮件控制台的,然后我将分享我是如何做到的。

我的断开连接的系统

如果您像我一样,您可能曾经使用标准电话线和本地 ISP 连接到互联网。我喜欢我的 ISP,但它们限制了我每月在线的小时数,并且当我超过该限制时会收取我很多钱。我不会更换 ISP,因为它们无疑是我所在地区最好的。由于我对在线时间的限制,我会挑选时间让我的 Linux 系统在线获取电子邮件、下载文件等等。我遇到的问题是,当我在工作时,我想要访问我的家用系统。当我在工作时,我经常发现自己需要访问我的家用系统来获取文件。由于我的每月限制,我不能简单地让我的计算机在白天持续连接到互联网。我需要的是一种方法,让我的家用系统在不需要时保持离线状态,然后在需要时上线并保持在线状态,直到我告诉它断开连接。

不久前,我决定让我的系统定期连接到互联网,并使用一个名为 fetchmail 的出色程序从我的 ISP 下载电子邮件。我编写了一些 Perl 脚本来自动化和同步来自各种应用程序的连接请求,包括 SETI@HOME 和 fetchmail,它们都需要在不同的时间连接到互联网。此外,我需要上线浏览,但不想在 fetchmail 实用程序完成其工作时断开连接。使用 fetchmail 获取电子邮件使我可以尽可能少地花费连接时间来获取和回复电子邮件——为什么要浪费连接时间键入回复呢?

这些脚本的主要目标是协调连接和断开连接请求,并在需要时保持我的系统在线。然后我想到,如果我可以以某种方式向我的系统发送一封电子邮件(我的系统每小时接收一次电子邮件),并以某种方式解析该电子邮件,以便可以执行命令,我就可以告诉我的系统保持在线或断开连接。答对了!现在我所要做的就是找到那个电子邮件解析、命令执行、梦想中的实用程序。解决方案就在我的键盘下。

建立连接

在我键盘下的一张纸上,列出了我认为可能对处理我的电子邮件有用的实用程序;procmail 就是其中之一。事实证明,Procmail 是一个非常实用的实用程序,用于对传入的电子邮件执行搜索,然后执行某种操作。目前,我使用 procmail 每 15 分钟解析一次我的传入电子邮件(我将其从一小时更改为 15 分钟,这样我就不必等待太长时间才能访问我的系统)。它执行命令,告诉我的系统在完成获取电子邮件后保持在线状态。现在,我可以向我的家用系统发送一封主题为“CONNECT REMOTE”的特殊电子邮件,我的系统将在从我的 ISP 获取并处理完所有电子邮件后保持在线状态。在我的 procmail 配置文件(一个 recipe 文件)中,我搜索了这个字符串,然后执行了我编写的 Perl 脚本,使我的系统保持在线状态。我也可以告诉它断开连接。一旦我设置好这些,我就想到,只要稍加努力,我就可以编写一个 procmail recipe 和 Perl 脚本,来执行我给它的任何任意命令。这是我听过的最酷的事情,我的 &quote;NT&quote; 朋友们会非常嫉妒!

锁定它

因为任何人都可以给我发送电子邮件,所以我必须制定一个协议,允许我和信任的朋友,但其他人不能执行命令。我还需确保结果安全返回,免受窥探。所有这些的解决方案在于加密和数字签名,这些都可以在另一个出色的实用程序 GnuPG 中找到。

项目

既然您已经了解了电子邮件控制台的由来,现在是时候将所有部分组合在一起,创建一个可工作的系统了。以下实用程序是本项目所必需的:

  • fetchmail - 用于获取邮件

  • procmail - 用于解析和执行电子邮件控制台脚本

  • GnuPG - 用于解密电子邮件并验证发送者的身份

免责声明

执行此项目可能会严重损坏您的系统。如果您实施此项目,地球上任何拥有互联网接入和电子邮件帐户的人——我是指任何人——都有可能能够在您的系统上执行任何命令——甚至是以 root 身份执行。请注意,如果您不能 100% 确定可以保护您的系统免受未经授权的使用,请不要尝试此项目。简单来说,如果您不知道自己在做什么,请不要做这个项目,如果您搞砸了并使您的系统被黑客入侵,请不要责怪我。我已经警告过您了。你知道吗?干脆别做。只需阅读[文章]并学习。但不要做。想象一下,有一天您登录时发现您的硬盘已被某个黑客擦除干净,因为他发现他可以向您的系统发送一封简单的电子邮件,其中包含一些简单的命令。您已被警告:执行此项目风险自负。

了解电子邮件

电子邮件进来;电子邮件出去。简单,对吧?啊,我的朋友,没那么简单。您的电子邮件需求和我的电子邮件需求可能不同。考虑到这一点,我将采取简单的方式来描述我的电子邮件设置。您可以自己研究如何根据您的电子邮件设置调整电子邮件控制台。

我使用 Exim 作为我的邮件投递代理 (MDA)。这会将传入的邮件投递到我的个人邮件文件夹/文件。顺便提一下,邮件传输代理 (MTA) 在连接的邮件主机之间传递邮件。再顺便提一下,邮件用户代理 (MUA) 是您用来读取和发送电子邮件的电子邮件客户端程序。许多 Linux 发行版使用 sendmail 作为其 MDA。

任何对您有效的方式都应该可以。要记住的关键是,当使用 MDA 时,本地电子邮件会被传递到您的电子邮件文件,通常是 /var/mail/your_account。某些 Linux 发行版在此配置上可能有所不同。我假设您不是直接从互联网接收电子邮件,而是使用 ISP 为您存储电子邮件。如果您设置了 DNS、静态 IP 并且具有直接的互联网电子邮件功能,请停止阅读,因为您可能比我更了解电子邮件系统。

当电子邮件在您的 ISP 处等待时,您基本上有两种方法可以检索它。第一种是使用客户端电子邮件程序(如 KMail 或 Netscape Mail)并通过 POP 或 IMAP 检索您的电子邮件。第二种选择是使用 fetchmail,它也使用 POP 或 IMAP。它将您的电子邮件传递到您的 MDA,然后 MDA 将电子邮件传递到您本地帐户的邮箱 (/var/mail/you_account)。还有其他获取电子邮件的方法,但它们与本次讨论无关。

一旦电子邮件位于 /var/local/your_account 中,您可以使用几乎任何电子邮件客户端来检索它。这通常意味着将电子邮件传输到您主文件夹中的另一个文件夹,例如 .mail 或 Mail,或其他位置。

在第二部分中,我们将讨论 fetchmail、procmail 以及如何使它们协同工作。

版权所有 2002 年,Addison-Wesley 出版社。保留所有权利。经 Pearson Education, Inc. 许可转载。

电子邮件: mtl@multitool.net

电子邮件: mtl@multitool.net

电子邮件: mtl@multitool.net

电子邮件: mtl@multitool.net

加载 Disqus 评论