Python 中的主机跳跃脚本
我为一家名为 Crisp Hughes Evans (CHE) 的公司提供远程办公咨询,该公司位于北卡罗来纳州阿什维尔。他们需要一种方法来下载由员工内部开发的 Apache、Zope 和 Plone 网站以及 Squid 代理服务器的 Web 日志,这些服务器在 CHE 设置的客户端 LAN 的防火墙后运行。由于 CHE 坚持尽量减少所用不同技术的数量,我需要看看是否可以在不更改计算机环境的情况下可靠地下载 Web 日志。存在几种下载日志的方法:NFS、SAMBA、HTTP、FTP 等等。但由于每台计算机都安装并运行了 SSH,我决定使用 Expect 和我最喜欢的编程语言 Python 来测试 SSH。
什么是 SSH?SSH 是一个用于登录远程计算机并执行命令或传输文件的程序。SSH 也是加密的。您可以在 www.openSSH.org 找到有关 SSH 的更多信息。我选择 SSH 是因为所有计算机都安装了 SSH,并且我试图避免安装新服务。
什么是 Expect?Expect 是一个接口,用于自动化您喜欢的服务(telnet、FTP、SSH 等)的登录会话。Expect 为您执行命令,就像它是交互式登录一样。它可以做到这一点,因为它处理执行程序时的输入和输出。实际上,它处理程序的预期响应。例如,它可以作为您登录并更改您的帐户密码。
我选择 Expect 是因为我需要在下载数据之前操作远程计算机上的文件。许多编程语言都有 Expect 接口,包括 Tcl、Perl 和 Python。您可以在 expect.nist.gov 找到有关 Expect 的更多信息。
什么是 Python?Python 是一种简洁易写的编程语言,用于 Web 编程和系统管理脚本。它也是 Zope Web 服务器的基础,并且可以创建可执行二进制文件等等。您可以在 www.python.org 找到有关 Python 的更多信息,在 pexpect.sourceforge.net 找到 Python Expect 模块的信息。
Python 是 CHE 所有程序员的首选语言。我们使用它来创建 Zope 和 Plone 网站,在 Apache 中编写 Web 脚本,创建单文件二进制可执行 Windows 程序以及其他系统管理任务。
在用 Perl 和 PHP 编程多年之后,Python 似乎是下一个自然步骤。我已经在 CHE 用 Python 编程了好几年,我不想突然切换到一种新语言。对于有适当指导的新程序员来说,学习 Python 也非常容易。
Python 是一种真正的面向对象语言,其逻辑结构强大。它还具有出色的异常错误处理能力。
<lit>我喜欢 Python。
使用 Python/Expect/SSH 组合的优势是什么?
我无需安装或支持任何新技术,因为所有计算机上都安装了 SSH 和 Python。
我不想安装任何新技术,因为我是远程办公,不想让我在东海岸的同事们接触任何新技术。
SSH 解决了许多安全问题。
Expect 的灵活性使我们能够将其用于未来的项目。
接下来要做的是编写 Python 代码。编写程序的最佳方法是将项目分解为可以重用于未来其他项目的片段。因此,第一步是创建一个通用的 Python 模块,它必须
检测远程计算机上是否存在脚本(或任何文件)。
将脚本(或任何文件)传输到远程计算机。
在远程计算机上执行脚本。
根据远程计算机上执行的脚本的响应下载文件。
使用 SSH 连接到远程计算机,接受任何必要的密钥,然后登录。
列表 1 显示了我编写的通用 Python 模块。
下一步是创建我想在远程计算机上执行的 Python 脚本(列表 2)。
然后,我需要创建使用 Expect 接口的 Python 脚本(列表 3)。
最后,我使用 python SSH_Example.py 执行了 Python/Expect 脚本。一切都运行良好。
一旦创建了基本模块,就很明显可以轻松编写小的 Python/Expect 脚本用于许多其他目的,以管理远程计算机上的简单任务。
结论:SSH/Python/Expect 组合对于从我们拥有的所有远程计算机下载文件非常有用。这是一项可靠的技术,将在 CHE 的未来项目中使用。
Mark Nielsen 是一位顾问,致力于帮助世界认识到 Linux、Python、PostgreSQL、Apache 和 Zope 的好处。在他的业余时间,他正在尝试解决 Ramsey 数问题,并可能参加今年的 Linux Lunacy 游轮。