Fabric是一个Python库和命令行工具,用于简化SSH在应用程序部署或系统管理任务中的使用。 Fabric非常简单且功能强大,可以帮助自动执行重复的命令行任务。 这种方法可以通过自动化整个工作流程来节省时间。

本教程将介绍如何使用Fabric与SSH集成并自动执行任务。

安装

最好通过pip安装Fabric:

$ pip install fabric

面料入门

用法

以下是演示如何使用Fabric的简单功能。

def welcome():
    print("Welcome to getting started with Fabric!")

上面的程序然后保存为fabfile.py在您当前的工作目录中。 可以使用fab工具执行welcome函数,如下所示:

$ fab welcome
Welcome to getting started with Fabric

Fabric提供了fab命令,该命令从文件fabfile.py读取其配置。 该文件应位于运行命令的目录中。 标准fabfile包含要在远程主机或一组远程主机上执行的功能。

特征

Fabric实现了可用于与远程主机通信的功能:

fabric.operations.run()

此操作用于在远程主机上运行shell命令。

例子

run("ls /var/www/")
run("ls /home/userx", shell=False)
output = run('ls /var/www/mysites'

fabric.operations.get()

此功能用于从远程主机下载文件。 下面的示例显示了如何从远程服务器下载备份。

# Downloading  a back-up
get("/backup/db.bak", "./db.bak")

fabric.operations.put()

此功能将文件上传到远程主机。 例如:

with cd('/tmp'):
    put('/path/to/local/test.txt', 'files')

fabric.operations.reboot()

顾名思义,此功能将重新引导系统服务器。

# Reboot the remote system
reboot()

fabric.operations.sudo()

该功能用于以超级用户权限在远程主机上执行命令。 另外,您还可以传递一个附加的用户参数,该参数允许您以root用户以外的其他用户身份运行命令。

# Create a directory
sudo("mkdir /var/www")

fabric.operations.local()

此功能用于在本地系统上运行命令。 一个例子是:

# Extract the contents of a tar archive
local("tar xzvf /tmp/trunk/app.tar.gz")

# Remove a file
local("rm /tmp/trunk/app.tar.gz")

fabric.operations.prompt()

该函数向用户提示文本并返回输入。

例子

# Simplest form:
environment = prompt('Please specify target environment: ')

# specify host
env_host = prompt('Please specify host:')

fabric.operations.require()

此功能用于检查共享环境字典中的给定密钥。 如果找不到,该操作将中止。

SSH整合

开发人员与FTP客户端以外的远程服务器进行交互的一种方式是通过SSH。 SSH用于连接到远程服务器,并执行从基本配置到运行Git或启动Web服务器的所有操作。

使用Fabric,您可以从本地计算机执行SSH活动。

下面的示例定义了显示如何检查可用磁盘空间和主机类型的函数。 它还定义了哪个主机将运行命令:

# Import Fabric's API module
from fabric.api import run

env.hosts = '159.89.39.54'

# Set the username
env.user = "root"


def host_type():
    run('uname -s')


def diskspace():
    run('df')


def check():

    # check host type
    host_type()

    # Check diskspace
    diskspace()

为了运行此代码,您将需要在终端上运行以下命令:

fab check
输出量
fab check[159.89.39.54] Executing task 'check'
[159.89.39.54] run: uname -s
[159.89.39.54] Login password for 'root': 
[159.89.39.54] out: Linux
[159.89.39.54] out: 

[159.89.39.54] run: df
[159.89.39.54] out: Filesystem     1K-blocks    Used Available Use% Mounted on
[159.89.39.54] out: udev              242936       0    242936   0% /dev
[159.89.39.54] out: tmpfs              50004    6020     43984  13% /run
[159.89.39.54] out: /dev/vda1       20145768 4398716  15730668  22% /
[159.89.39.54] out: tmpfs             250012    1004    249008   1% /dev/shm
[159.89.39.54] out: tmpfs               5120       0      5120   0% /run/lock
[159.89.39.54] out: tmpfs             250012       0    250012   0% /sys/fs/cgroup
[159.89.39.54] out: /dev/vda15        106858    3426    103433   4% /boot/efi
[159.89.39.54] out: tmpfs              50004       0     50004   0% /run/user/0
[159.89.39.54] out: none            20145768 4398716  15730668  22% /var/lib/docker/aufs/mnt/781d1ce30963c0fa8af93b5679bf96425a0a10039d10be8e745e1a22a9909105
[159.89.39.54] out: shm                65536       0     65536   0% /var/lib/docker/containers/036b6bcd5344f13fdb1fc738752a0850219c7364b1a3386182fead0dd8b7460b/shm
[159.89.39.54] out: none            20145768 4398716  15730668  22% /var/lib/docker/aufs/mnt/17934c0fe3ba83e54291c1aebb267a2762ce9de9f70303a65b12f808444dee80
[159.89.39.54] out: shm                65536       0     65536   0% /var/lib/docker/containers/fd90146ad4bcc0407fced5e5fbcede5cdd3cff3e96ae951a88f0779ec9c2e42d/shm
[159.89.39.54] out: none            20145768 4398716  15730668  22% /var/lib/docker/aufs/mnt/ba628f525b9f959664980a73d94826907b7df31d54c69554992b3758f4ea2473
[159.89.39.54] out: shm                65536       0     65536   0% /var/lib/docker/containers/dbf34128cafb1a1ee975f56eb7637b1da0bfd3648e64973e8187ec1838e0ea44/shm
[159.89.39.54] out: 


Done.
Disconnecting from 159.89.39.54... done.

自动化任务

Fabric使您可以在远程服务器上运行命令,而无需登录到远程服务器。

使用Fabric进行远程执行可能会导致安全威胁,因为它需要一个开放的SSH端口,尤其是在Linux计算机上。

例如,假设您要更新远程服务器上的系统库。 您不必每隔一段时间执行一次任务。 您只需编写一个简单的fab文件,即可在每次要执行任务时运行。

在这种情况下,您将首先导入Fabric API的模块:

from fabric.api import *

定义要更新的远程主机:

env.hosts = '159.89.39.54'

设置远程主机的用户名:

env.user = "root"

尽管不建议这样做,但您可能需要指定远程主机的密码。

最后,定义用于更新远程主机中库的函数。

def update_libs():
    """
        Update the default OS installation's
        basic default tools.
                                            """
    run("apt-get    update")

现在您的fab文件已经准备就绪,您只需执行以下操作即可:

$ fab update

您应该看到以下结果:

$ fab update
[159.89.39.54] Executing task 'update'
[159.89.39.54] run: apt-get    update
[159.89.39.54] Login password for 'root':

如果您未定义密码,将提示您输入密码。

程序完成定义的命令的执行后,如果没有错误发生,您将得到以下响应:

$ fab update
............

Disconnecting from 159.89.39.54... done.

结论

本教程介绍了在本地和远程主机上开始使用Fabric所必需的内容。 现在,您可以放心地开始编写自己的脚本,以构建,监视或维护远程服务器。

翻译自: https://code.tutsplus.com/tutorials/getting-started-with-the-fabric-python-library--cms-30555