在不断变化的软件开发世界中,高效的远程服务器管理至关重要。无论你是系统管理员、软件工程师还是软件开发人员,能够在远程服务器上运行Linux命令都是一项常见任务。
在本文中,小编主要介绍Fabric(一个高级Python库,旨在通过SSH远程执行Linux命令),它是为任何需要管理远程系统同时利用Python强大功能的人不可或缺的工具。
什么是Fabric?
Fabric是一个多功能的Python库,它简化了通过SSH连接在远程服务器上运行shell命令的过程。它最初由Jeff Forcier开发,后来成为一个开源项目。
它提供了一个用于处理远程系统的高级Pythonic界面,使你可以轻松地跨多个服务器自动执行任务、部署代码和管理配置。
为什么要使用Fabric?
选择Fabric来满足远程命令执行需求有几个令人信服的理由:
- Pythonic协议– Fabric遵循Python的理念,使开发人员和系统管理员可以轻松地用他们已经熟悉的语言编写脚本。
- SSH和Paramiko – Fabric依赖Paramiko库来处理SSH连接,这提供了一种安全可靠的方式来远程执行命令。
- Task-Based Workflow——Fabric鼓励采用面向任务的方法来执行远程命令。你定义任务,本质上是 Python函数,Fabric负责在远程服务器上执行它们。
- Use Cases– Fabric是一款多功能工具,适用于各种使用案例,包括部署应用程序、管理服务器配置和运行系统维护任务。
在Linux中安装Fabric
Fabric的一个重要特性是你需要管理的远程计算机只需要安装标准的OpenSSH服务器即可。此外,你只需在用于管理远程服务器的服务器上安装某些要求即可开始。
注意要求:
- Python 2.5+及开发头文件
- Python-setuptools和pip(可选,但建议安装)gcc
使用pip包管理器可以轻松安装Fabric,但你可能还喜欢选择默认包管理器yum、dnf或apt/apt-get来安装Fabric包,通常称为Fabric或python-fabric。
在RHEL系统中安装Fabric
在基于RHEL的发行版(例如CentOS Stream、Rocky Linux和AlmaLinux )上,必须在系统上安装并启用EPEL 存储库才能安装结构包,命令如下:
sudo dnf install epel-release sudo dnf install fabric
在Debian系统中安装Fabric
在基于Debian的发行版(例如Ubuntu和Linux Mint)上,用户可以简单地安装Fabric软件包,命令如下:
sudo apt install fabric
使用PiP安装Fabric
如果你的系统存储库中没有提供Fabric ,可以使用pip来安装它,命令如下:
sudo yum install python3-pip [基于RedHat系统] sudo dnf install python3-pip [基于Fedora 22+版本] sudo apt install python3-pip [基于Debian系统]
一旦pip安装成功,你可以使用pip获取最新版本的fabric,如下所示:
pip3 install fabric
使用Fabric自动化Linux管理任务
现在了解如何使用Fabric。作为安装过程的一部分,名为'fab'
的Python脚本已添加到系统PATH中的目录中。'fab'
脚本处理使用Fabric时的所有任务。
在本地运行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
现在让我们看一个在本地计算机上执行uptime命令的fabfile.py示例。
示例2:打开一个新的fabfile.py文件,如下所示:
# vi fabfile.py
并将以下代码行粘贴到文件中:
#! /usr/bin/env python from fabric.api import local def uptime(): local('uptime')
然后保存文件并运行以下命令:
# fab uptime
通过SSH远程运行Linux 命令
Fabric API使用配置字典,该字典相当于Python中名为env
的关联数组,它存储控制Fabric操作的值。
这是要在env.hosts
上运行Fabric任务的服务器列表。如果你的网络是192.168.0.0并且希望使用fabfile来管理192.168.0.2和192.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
示例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
在远程Linux服务器上自动安装LAMP堆栈
示例5:接下来看看在远程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
,可帮助你指定要导入的不同Python模块文件,而不是fabfile.py
。 - 要指定连接到远程主机时使用的用户名,请使用该
--user=USER
选项。 - 要使用密码进行身份验证和/或sudo,请使用该
--password=PASSWORD
选项。 - 要输出有关命令NAME的详细信息,请使用
--display=NAME
选项。 - 要查看格式,请使用
--list
选项,选择short,normal,nested,,使用选项--list-format=FORMAT
。 - 要输出可能的命令列表并退出,请包含该
--list
选项。 - 可以使用
--config=PATH
选项指定要使用的配置文件的位置。 - 要显示彩色错误输出,请使用
--colorize-errors
。 - 要查看程序的版本号并退出,请使用
--version
选项。
总结
Fabric是一个功能强大的Python库,可简化通过SSH的远程命令执行,提供用户友好的Pythonic方法。它简化复杂任务和自动化系统管理的能力使其成为系统管理员、开发人员和DevOps专业人员的宝贵工具。
无论你是管理单个服务器还是编排大规模部署,Fabric都可以帮助你高效且有效地完成工作,感兴趣的小伙伴可以尝试用用。