在軟體開發不斷變化的世界中,高效的遠程伺服器管理至關重要。無論您是系統管理員、軟體工程師還是軟體開發人員,能夠在遠程伺服器上執行 Linux 命令是一個常見的任務。
這就是 Fabric 的用武之地,它是一個高級 Python 函式庫,旨在通過 SSH 遠程執行 Linux 命令,使其成為需要在利用 Python 強大功能的同時管理遠程系統的任何人的不可或缺的工具。
Fabric 是什麼?
Fabric 是一個多功能的 Python 函式庫,簡化了在 SSH 連接上運行 shell 命令的過程。它最初由 Jeff Forcier 開發,後來成為一個開源項目。
它提供了一個高級的、Pythonic 的接口,用於與遠程系統合作,讓您可以輕鬆地自動化任務、部署代碼並跨多個伺服器管理配置。
為什麼使用 Fabric?有幾個令人信服的理由選擇 Fabric 來滿足您的遠程命令執行需求:
- Pythonic Approach – Fabric 遵循 Python 的哲學,使開發人員和系統管理員能夠使用他們已經熟悉的語言輕鬆編寫腳本。
- SSH and Paramiko – Fabric 依賴於 Paramiko 库來處理 SSH 連接,提供了一種安全可靠的遠程執行命令的方式。handle SSH connections。
- Task-Based Workflow – Fabric 鼓勵以任務為導向的方式來執行遠程命令。您定義任務,它們本質上是 Python 函數,Fabric 負責在遠程服務器上執行它們。
- Use Cases – Fabric 是一個多用途工具,適用於各種用例,包括部署應用程序、管理服務器配置和運行系統維護任務。
在本指南中,我們將介紹並開始使用 Fabric 來增強對服務器群組的管理。
如何在 Linux 中安裝 Fabric 自動化工具
fabric 的一個重要特點是,您需要管理的遠程機器只需要安裝標準的 OpenSSH 服務器。
您只需要在您用來管理遠程服務器的服務器上安裝特定的要求,然後您就可以開始了。
要求:
- Python 2.5+ 及開發標頭
- Python-setuptools 和 pip(可選,但推薦)gcc
Fabric 可以很容易地使用 pip 包管理器 安裝,但您也可能更喜歡選擇您的默認包管理器 yum、dnf 或 apt/apt-get 來安裝 fabric 包,通常稱為 fabric 或 python-fabric.
在 RHEL 系統上安裝 Fabric
在基於RHEL的發行版,例如CentOS Stream、Rocky Linux和AlmaLinux上,您必須在系統上安裝並啟用EPEL倉庫,才能安裝fabric套件。
sudo dnf install epel-release sudo dnf install fabric
在Debian系統中安裝Fabric
在基於Debian的發行版,如Ubuntu和Linux 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

現在讓我們來看一個fabfile.py的例子,用於在本地機器上執行uptime命令。
例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,並且希望管理主機192.168.0.2和192.168.0.6與您的fabfile,您可以將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 – 將一個或多個文件上傳到遠程機器。
Example 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堆棧
範例 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
可以幫助您指定一個不同的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都可以幫助您高效且有效地完成工作。
Source:
https://www.tecmint.com/automating-linux-system-administration-tasks/