Fabric-通过SSH自动化Linux命令执行和部署

在不断变化的软件开发世界中,高效的远程服务器管理至关重要。无论您是系统管理员、软件工程师还是软件开发人员,能够在远程服务器上运行 Linux 命令是一个常见的任务。

这就是 Fabric 的用武之地,它是一个高级 Python 库,旨在通过 SSH 远程执行 Linux 命令,使其成为需要管理远程系统并利用 Python 强大功能的人们不可或缺的工具。

Fabric 是什么?

Fabric 是一个多才多艺的 Python 库,简化了通过 SSH 连接在远程服务器上运行 shell 命令的流程。最初由 Jeff Forcier 开发,后来成为一个开源项目。

它提供了一个高级、Python 风格的接口,用于与远程系统交互,可以轻松地自动化任务、部署代码和管理多台服务器的配置。

为什么使用 Fabric?

选择 Fabric 作为远程命令执行工具有几个令人信服的理由:

  • Pythonic Approach – Fabric遵循Python的理念,使开发人员和系统管理员能够轻松用他们已经熟悉的语言编写脚本。
  • SSH and Paramiko – Fabric依赖于Paramiko库来处理SSH连接,从而提供了一种安全可靠的远程执行命令的方式。
  • Task-Based Workflow – Fabric鼓励采用面向任务的方式来执行远程命令。您定义任务,本质上是Python函数,Fabric负责在远程服务器上执行它们。
  • Use Cases – Fabric是一种多才多艺的工具,适用于各种用例,包括部署应用程序、管理服务器配置和运行系统维护任务。

在本指南中,我们将介绍并开始使用Fabric来增强服务器管理以应对一组服务器。

如何在Linux中安装Fabric自动化工具

fabric的一个重要特点是,您需要管理的远程机器只需要安装标准的OpenSSH服务器您只需要在开始之前在您用来管理远程服务器的服务器上安装特定的要求。

您只需要在您用于管理远程服务器的服务器上安装某些要求,然后您就可以开始操作了。

要求:

  • Python 2.5+ 及其开发头文件
  • Python-setuptools 和 pip(可选,但推荐)gcc

Fabric 可以通过pip 包管理器轻松安装,但您可能更喜欢选择默认的包管理器yumdnfapt/apt-get来安装fabric包,通常称为fabricpython-fabric.

在RHEL系统上安装Fabric

在基于RHEL的发行版,如CentOS StreamRocky LinuxAlmaLinux上,您必须在系统上安装并启用EPEL仓库才能安装fabric软件包。

sudo dnf install epel-release
sudo dnf install fabric

在Debian系统中安装Fabric

在基于Debian的发行版,如UbuntuLinux Mint上,用户可以简单地使用apt来安装fabric软件包,如下所示:

sudo apt install fabric

使用PiP安装Fabric

如果fabric在您的系统仓库中不可用,您可以使用pip来安装它,如下所示。

sudo yum install python3-pip       [On RedHat based systems] 
sudo dnf install python3-pip       [On Fedora 22+ versions]
sudo apt install python3-pip       [On Debian based systems]

一旦pip成功安装,您可以使用pip来获取最新版本的fabric,如下所示:

pip3 install fabric

如何使用Fabric自动化Linux管理任务

让我们开始学习如何使用Fabric。作为安装过程的一部分,一个名为'fab'的Python脚本已被添加到系统PATH中的一个目录。当使用Fabric时,'fab'脚本处理所有任务。

在本地运行Linux命令

按照惯例,您需要首先使用您喜欢的文本编辑器创建一个名为fabfile.py的Python文件。请记住,您可以随意给这个文件起不同的名字,但是您需要按照以下方式指定文件路径:

fab --fabfile /path/to/the/file.py

Fabric使用'fabfile.py'来运行任务,'fabfile'应该位于您执行Fabric工具的同一目录中。

示例1:让我们首先创建一个基本的Hello World

# vi fabfile.py

将这些代码行添加到文件中。

def hello():
       print('Hello world, Tecmint community')

保存文件并运行以下命令。

# fab hello
Fabric Tool Usage

现在让我们看一个fabfile.py的例子,它用于在本地机器上执行uptime命令。

示例2:按照以下方式打开一个新的fabfile.py文件:

# vi fabfile.py

并将以下代码行粘贴到文件中。

#!  /usr/bin/env python
from fabric.api import local
def uptime():
  local('uptime')

然后保存文件并运行以下命令:

# fab uptime
Fabric: Check System Uptime

通过SSH远程运行Linux命令

Fabric API使用一个配置字典,这是Python中相当于关联数组的env,它存储控制Fabric行为的值。

env.hosts 是一个包含您希望在其上运行Fabric任务的服务器的列表。如果您的网络是192.168.0.0,并且希望管理主机192.168.0.2192.168.0.6,您可以通过以下方式配置env.hosts

#!/usr/bin/env python
from  fabric.api import env
env.hosts = [ '192.168.0.2', '192.168.0.6' ]

上述代码行仅指定了您将在其上运行Fabric任务的主机,但不做更多事情。因此,您可以定义一些任务,Fabric提供了一组函数,您可以使用这些函数与远程机器进行交互。

尽管有许多函数,但最常用的函数包括:

  • run – 在远程机器上运行shell命令。
  • local – 在本地机器上运行命令。
  • sudo – 在远程机器上运行具有root权限的shell命令。
  • Get – 从远程机器下载一个或多个文件。
  • Put – 将一个或多个文件上传到远程机器。

示例3: 要在多个机器上回显一条消息,请创建一个如下的fabfile.py

#!/usr/bin/env python
from fabric.api import env, run
env.hosts = ['192.168.0.2','192.168.0.6']
def echo():
      run("echo -n 'Hello, you are tuned to Tecmint ' ")

要执行任务,请运行以下命令:

# fab echo
Fabric: Automate Linux Tasks on Remote Linux

示例4:您可以改进之前创建的fabfile.py文件,以便在本地机器上执行uptime命令,使其运行uptime命令,并使用df命令检查多台机器的磁盘使用情况,如下所示:

#!/usr/bin/env python
from fabric.api import env, run
env.hosts = ['192.168.0.2','192.168.0.6']
def uptime():
      run('uptime')
def disk_space():
     run('df -h')

保存文件并运行以下命令:

# fab uptime
# fab disk_space
Fabric: Automate Tasks on Multiple Linux Systems

自动在远程Linux服务器上安装LAMP堆栈

示例4:让我们来看一个在远程Linux服务器上部署LAMP(Linux、Apache、MySQL/MariaDB和PHP)服务器的示例。

我们将编写一个函数,允许使用root权限远程安装LAMP。

对于RHEL/CentOS和Fedora
#!/usr/bin/env python
from fabric.api import env, run
env.hosts = ['192.168.0.2','192.168.0.6']
def deploy_lamp():
  run ("yum install -y httpd mariadb-server php php-mysql")
对于Debian/Ubuntu和Linux Mint
#!/usr/bin/env python
from fabric.api import env, run
env.hosts = ['192.168.0.2','192.168.0.6']
def deploy_lamp():
  sudo("apt-get install -q apache2 mysql-server libapache2-mod-php php-mysql")

保存文件并运行以下命令:

# fab deploy_lamp

注意:由于输出较大,我们无法为此示例创建屏幕录像(动画gif)。

现在您可以使用Fabric及其上述功能和示例来自动化Linux服务器管理任务

Fabric有用选项

  • 您可以运行 fab --help 来查看有用的信息和一长串可用的命令行选项。
  • 一个重要的选项 --fabfile=PATH 可以帮助您指定一个不同于 fabfile.py 的Python模块文件来导入。
  • 要指定用于连接到远程主机的用户名,请使用 --user=USER 选项。
  • 要使用密码进行身份验证和/或 sudo,请使用 --password=PASSWORD 选项。
  • 要打印有关命令 NAME 的详细信息,请使用 --display=NAME 选项。
  • 要查看格式,请使用 --list 选项,选择:短,正常,嵌套,使用 --list-format=FORMAT 选项。
  • 要打印可能的命令列表并退出,请包含 --list 选项。
  • 您可以通过使用 --config=PATH 选项来指定要使用的配置文件的位置。
  • 要显示彩色错误输出,请使用 --colorize-errors
  • 要查看程序的版本号并退出,请使用 --version 选项。
总结

Fabric 是一个强大的Python库,它通过 SSH 简化了远程命令执行,提供了一个用户友好的Pythonic方法。它能够简化复杂任务和自动化系统管理,使其成为系统管理员、开发人员和DevOps专业人员的宝贵工具。

无论您是管理单个服务器还是协调大规模部署,Fabric都可以帮助您高效而有效地完成工作。

Source:
https://www.tecmint.com/automating-linux-system-administration-tasks/