Fabric简介
Fabric是一个Python库,可以通过SSH在多个host上批量执行任务。你可以编写任务脚本,然后通过Fabric在本地就可以使用SSH在大量远程服务器上自动运行。这些功能非常适合应用的自动化部署,或者执行系统管理任务。
官网 中文站点
Fabric常用环境变量
fabric的环境变量有很多,存放在一个字典中,fabric.state.env,而它包含在fabric.api中,为了方便,我们一般使用env来指代环境变量。env环境变量可以控制很多fabric的行为,一般通过env.xxx可以进行设置。
fabric默认使用本地用户通过ssh进行连接远程机器,不过你可以通过env.user变量进行覆盖。当你进行ssh连接时,fabric会让你交互的让你输入远程机器密码,如果你设置了env.password变量,则就不需要交互的输入密码。
常用的环境变量
1 | import fabric.api |
Fabric执行模式
执行策略:fabric默认是单一的,串行的执行函数,虽然有一个paralle模式可供你选择。默认的行为遵循以下优先级规则:
1、一个task列表被创建,通过命令行传递给fab
2、针对每一个task,都有一个主机列表通过变量设置
3、task列表按顺序执行每个task在主机列表中的主机上执行一遍
4、如果主机列表为空,则默认在本地执行,也是执行一次
Fabric常用API
1 | [root@bogon fabric]# python |
API应用场景案例
案例1:同时查看本地及远程主机信息
案例2:动态获取远程目录列表
案例3:网关模式文件的上传与下载
Fabric安装及使用
Fabric安装
1 | pip install fabric |
fab命令默认被安装到Python的目录下,需要创建软链接
1 | [root@saltstack ~]# find / -type f -name "fab" |
Fabric应用案例
案例1:本地执行一组操作
直接用命令行的形式执行远程命令
1 | [root@bogon fabric]# fab -p 'strong' -H 192.168.80.128 -- 'uname -m' |
案例2:远程查看服务器类型
1 | [root@saltstack fabric]# cat fabric_1.py |
案例3:远程传递参数(本地执行原理一致)
1 | [root@saltstack fabric]# cat fabric_2.py |
案例4:多台服务器批量执行相同的操作
1 | [root@saltstack fabric]# cat fabric_3.py |
案例5:多台服务器混合,需要在不同服务器进行不同操作时
1 | [root@saltstack fabric]# cat fabric_4.py |
Fabric扩展
扩展1:打印颜色
1 | [root@saltstack fabric]# cat fabric_5.py |
效果图:
扩展2:错误及异常
默认,一组命令,上一个命令执行失败后,不会接着往下执行,失败后也可以进行不一样的处理,详解文档
默认情况
1 | [root@saltstack fabric]# cat fabric_6.py |
扩展3:密码管理
1)Fabric既支持ssh公钥认证也支持管理密码的机制
2)Fabric的密码管理机制提供了两层密码。如果你的server有相同的密码,可以在env.password中设置默认的密码;如果server密码不同,还可以在env.passwords中设置(host,password)对,为每个server设置单独的ssh密码。
Fabric小结
使用Fabric,你可以管理一系列host的SSH连接(包括主机名,用户,密码),定义一系列的任务函数,然后灵活的指定在哪些host上执行哪些任务。这非常使用于需要管理大量host的场景,比如运维,私有云管理,应用自动化部署等。
本文只是一篇入门文档,远没有体现出Fabric的强大。实际上,Fabric还包括大量的功能,比如Role的定义,远程交互及异常处理,并发执行,文件操作等,并且不仅仅局限于命令行方式,可以在你的应用中调用Fabric。
希望本文能够引起你对Fabric的兴趣,并在你的实际应用中解决问题。
======================================================
希望各位朋友支持一下
- 领取我的阿里云幸运券,谢谢.
- 使用腾讯云资源
- Linode VPS
- 搬瓦工VPS
- 阿里云1888元云产品通用代金券点我
- 阿里云最新活动全民云计算升级-拼团上云更优惠

本文作者:dongsheng
本文地址: https://mds1455975151.github.io/archives/6a4f7595.html
版权声明:转载请注明出处!


