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