Python Fabric 模块

2024 年 8 月 29 日 | 14 分钟阅读

Linux 用户必须定期执行各种管理和通用任务,例如在进行任何更改后重新加载 Apache 服务器、开发和部署新应用程序、访问某些日志文件等等。要定期执行这些操作,SSH(安全外壳)是必不可少的。Fabric 是一个有用的 Python 模块,它与 SSH 和操作系统协同工作,以自动化各种应用程序开发和管理活动。这个命令行程序简单易用。本文演示了如何在 Python 3+ 中安装和使用 Fabric 库。

它扩展了 Invoke(子进程命令执行和命令行功能)和 Paramiko(SSH 协议实现)的 API,补充并提供了额外功能。该项目的维护者维护着一个路线图。Fabric 的项目信息,例如变更日志和贡献要求,可在官方网站上找到。代码文档站点 docs.fabfile.org 提供了详尽的使用和 API 文档。

Paramiko 是一个允许您执行基本或低级 SSH 任务的库。Fabric 是一个在内部使用 Paramiko 来执行各种更高级任务(用于 SSH 目的)的库。简而言之,如果您只想进行 SSH,请使用 Paramiko;如果您想做更多事情,例如运行配置、在服务器上安装东西或部署代码,请使用 Fabric 脚本。它将使您的生活更轻松,因为与直接使用 Paramiko 相比,您需要编写的代码行数更少。(而且不用担心,因为 Paramiko 是被 Fabric 在内部使用的)。

Paramiko 通过导入的库,简单地提供了一种在 Python 中使用 SSH 的便捷方法。Fabric 允许您创建一个“fabfile”并执行其中编程的各种操作。这可以是您想要的任何内容。例如,在我的 PC 上,我有一个 fabfile,它链接到个人服务器,cd 到正确的目录,拉取 git 分支,将不同的配置文件传输到正确的位置(uwsgi、Nginx),并重新启动适当的服务。因此,我只需在我的本地 PC 上使用一个命令即可将我的网站的最新版本在线发布。Fabric 还将 Paramiko 用作其依赖项。

现在我们知道 Fabric 库在内部使用了 Paramiko 模块,让我们来看看 Python 库的 Paramiko 模块。

在高级客户端 API 中,第一步是创建 SSHClient 对象。将套接字(或类似套接字的对象)传递给 Transport 以获得更直接的控制,然后使用 start server 或 start client 与远程主机作为服务器或客户端进行协商。作为客户端,您负责验证服务器的主机密钥并使用密码或私钥进行身份验证。(Paramiko 会处理密钥签名和验证,但您需要提供私钥并仔细检查公钥的内容是否与您预期的一致。)您作为服务器,负责确定接受哪些用户、密码和密钥,以及启用哪些通道。完成后,任何一方都可以请求流控制通道。

现在让我们看看 Fabric 模块在 Python 中的使用代码:

代码:

输出

nirnay@superbook:~$ python3 fabfile.py 
Select any one of the fab operations you want to do::
1. To list all directories which are present.
2. To create a new directory.
3. To move to another directory.
4. To create files in a specific directory.
5. To list all the files inside a directory.
6. To display the files and dirs in tree mode.
7. To exit from the code execution.
1
primary
All dirs listed successfully.
To move ahead with code execution enter [y] else [n]
y
Select any one of the fab operations you want to do::
1. To list all directories which are present.
2. To create a new directory.
3. To move to another directory.
4. To create files in a specific directory.
5. To list all the files inside a directory.
6. To display the files and dirs in tree mode.
7. To exit from the code execution.
2
Enter the name of the directory that you want to create
mydir
mydir directory created successfully.
To move ahead with code execution enter [y] else [n]
y
Select any one of the fab operations you want to do::
1. To list all directories which are present.
2. To create a new directory.
3. To move to another directory.
4. To create files in a specific directory.
5. To list all the files inside a directory.
6. To display the files and dirs in tree mode.
7. To exit from the code execution.
1
mydir
primary
All dirs listed successfully.
To move ahead with code execution enter [y] else [n]
y
Select any one of the fab operations you want to do::
1. To list all directories which are present.
2. To create a new directory.
3. To move to another directory.
4. To create files in a specific directory.
5. To list all the files inside a directory.
6. To display the files and dirs in tree mode.
7. To exit from the code execution.
3
Enter the name of the directory to which you want to move
mydir
/home/client/Desktop/mydir
directory changed successfully
To move ahead with code execution enter [y] else [n]
y
Select any one of the fab operations you want to do::
1. To list all directories which are present.
2. To create a new directory.
3. To move to another directory.
4. To create files in a specific directory.
5. To list all the files inside a directory.
6. To display the files and dirs in tree mode.
7. To exit from the code execution.
4
Enter the name of the directory in which you want to create files
mydir
Files were created successfully in the media directory.
To move ahead with code execution enter [y] else [n]
y
Select any one of the fab operations you want to do::
1. To list all directories which are present.
2. To create a new directory.
3. To move to another directory.
4. To create files in a specific directory.
5. To list all the files inside a directory.
6. To display the files and dirs in tree mode.
7. To exit from the code execution.
5
Enter the name of the directory in which you want to list files
mydir
files1
files10
files11
files12
files13
files14
files15
files2
files3
files4
files5
files6
files7
files8
files9
Files are listed successfully in the mydir directory.
To move ahead with code execution enter [y] else [n]
y
Select any one of the fab operations you want to do::
1. To list all directories which are present.
2. To create a new directory.
3. To move to another directory.
4. To create files in a specific directory.
5. To list all the files inside a directory.
6. To display the files and dirs in tree mode.
7. To exit from the code execution.
6
.
|-- mydir
|   |-- files1
|   |-- files10
|   |-- files11
|   |-- files12
|   |-- files13
|   |-- files14
|   |-- files15
|   |-- files2
|   |-- files3
|   |-- files4
|   |-- files5
|   |-- files6
|   |-- files7
|   |-- files8
|   `-- files9
`-- primary

2 directories, 15 files
All dirs and files are listed successfully.
To move ahead with code execution enter [y] else [n]
n

结论

在上述代码中,我们使用了 Python 的 Fabric 模块对远程站点服务器执行各种操作,这些操作都从客户端机器发起,并且每次触发特定操作时,都会在远程站点服务器和客户端机器之间建立一个安全连接,并在成功建立远程站点服务器和客户端机器之间的连接后,使用 Fabric 函数执行特定的操作。执行的各种操作包括列出目录中存在的所有目录、创建新目录、列出特定目录中存在的所有文件、在目录中创建一组新文件、更改当前代码执行工作目录,以及以递归方式列出特定目录中存在的所有文件和目录,这意味着目录中存在的目录中的文件或目录也会在此方法中列出。所有这些操作都有单独的函数来执行指定的操作。在每种方法中,首先在服务器端和客户端机器之间建立安全连接,并使用 Fabric 模块的内置函数来建立服务器和客户端之间的安全连接,一旦连接建立,将执行指定的操作。例如,如果用户选择了在特定目录中创建新目录,系统将提示用户输入想要创建的新目录的名称,在输入需要创建的目录名称后,将执行创建目录操作,并且在目录成功创建后,将向用户提示类似的消息。同样,如果用户选择了列出特定目录中所有目录的选项,系统将提示用户输入要从中列出子目录的目录名称,在输入父目录名称后,将列出该目录中存在的所有子目录。同样,无论用户选择哪个选项,系统都会在需要时询问用户相关的输入,并在服务器上执行该特定操作,并将生成的输出显示给用户。因此,用户会看到用于在远程站点服务器上执行不同操作的函数或选项菜单,用户可以选择其中任何一个来执行特定的操作。这个选项菜单会持续打印,以供用户执行各种选项。如果用户想要退出代码执行,他可以选择最后一个选项,通过该选项用户可以退出当前代码的执行。

Fabric 模块在 Python 中的优势

现在让我们讨论一下 Fabric 模块在 Python 中的一些主要优势,这些优势使其成为开发人员自动执行一系列需要在远程服务器上重复执行的任务的强大而流行的选择,这些任务是各种应用程序配置的先决条件。

  • 鉴于 Fabric 是一个 Python 库,任何 Python 命令(或方法)和模块都可以直接与它一起使用。Fabric 的主要价值在于其与 SSH 的海量且出色的交互,它允许您通过简单的脚本(即 fabfile.py)自动化所有内容。本节列出了 Fabric 工具(例如函数),可用于与执行您表达的命令的环境进行交互。
  • 部署应用程序(无论是网站、API 还是服务器)通常需要从头开始(或从快照开始),更新所有内容,下载依赖项,设置文件结构和权限,最后上传您的代码库 - 或使用 Git 等版本控制系统下载它。在开发阶段(例如,在进入部署周期之前),您可能会有一些需要定期运行的指令。
  • 一旦您意识到重复执行相同步骤会浪费多少时间,并且使整个过程容易出错,您就会发现能够以逻辑有序且最重要的——可编程的方式(本地和远程)编写这些流程脚本将迅速变得有益。Fabric 以 Python 文件的形式为您提供帮助,该文件确切地知道该做什么以及在哪里做。
  • 一旦您开始使用您的 droplet(一个完全虚拟化的服务器,具有完整的管理和访问权限),那些看起来神秘的事情将很快变得熟悉。当您启动应用程序并开始处理其维护时,遇到一些挑战是正常的。然而,随着您的应用程序变得越来越受欢迎,并且事情开始扩展,管理多个 droplet 并重复所有工作的必要性将不再令人愉快。
  • 如我们开头所述,单个 Fabric 脚本(fabfile)可用于在本地机器和远程系统(s)上执行活动。为此,Fabric 提供了本地操作员在本地运行命令的能力。
  • 但是,与 run 或 sudo 不同,无法以相同的方式与 local 的输出进行交互。可以通过 capture 参数配置该开关,以捕获或打印任一输出。Local 辅助程序,例如 lcd 上下文管理器(它设置本地工作目录),其行为方式与 run(或 sudo)遵循 cd 上下文管理器的方式相同。

因此,在本文中,我们已经看到了如何使用 Python 的 Fabric 模块连接到远程服务器并在该远程服务器上执行各种操作。Fabric 模块的主要用例是在系统管理员或网络控制器需要管理组织内具有不同配置和要求的多个客户端机的场景中。在这种情况下,网络管理员或系统管理员可以使用 Python 的 Fabric 模块,借助简单的 Python 代码轻松自动化安装和配置各种系统配置和设置文件的作业。同样,我们在本示例中看到了如何仅通过一个简单的 Python 脚本轻松地在远程站点服务器上执行各种操作。这些函数可以执行从简单到复杂的任务。