Fabric 可以通过 SSH 在多台客户端主机上批量执行任务,是基于 paramiko 封装开发的,paramiko 更底层一些,安装方法如下:

  1. [root@localhost ~]$ yum install -y gcc python-pip python-devel # 安装基础软件包
  2. [root@localhost ~]$ pip install pycrypto==2.3 # 安装 paramiko 的依赖包,paramiko 使用 ssh 登录需要用到 pycrypto 来提供加密算法,保证 ssh 安全性
  3. [root@localhost ~]$ pip install paramiko==1.12.4 # 安装 Fabric 的依赖包,Fabric 是基于 paramiko 封装的
  4. [root@localhost ~]$ pip install fabric==1.8.3 # 最后安装 Fabric,安装之后会提供 fab 命令,也会提供很多 Fabric 的 API

Fabric 简单用法:

  1. [root@localhost ~]$ cat fabfile.py # 需要定义一个fabfile.py文件,文件名是固定的

  2. from fabric.api import run # 使用Fabric提供的API,run用来远程执行命令
  3.  
  4. def getHostname(): # 定义一个函数,用来获取主机名
  5. run('hostname')
  1. [root@localhost ~]$ fab -H 192.168.216.130 getHostname # 通过 fab 命令来调用 fabfile.py 文件
  2. [192.168.216.130] Executing task 'getHostname' # -H 192.168.216.130 用于指定对哪个远程主机进行操作
  3. [192.168.216.130] run: hostname # getHostname 表示执行 fabfile.py 文件里的哪个函数
  4. [192.168.216.130] out: localhost.localdomain # 注意:使用 Fabric 的前提是保证 ssh 可以通过密钥登录
  5. [192.168.216.130] out: Done.
  6. Disconnecting from 192.168.216.130... done.

Fabric 使用环境变量:

  1. [root@localhost ~]$ cat fabfile.py # 可以在 fabfile.py 里通过 env 自定义环境变量
  2. # 这些环境变量的变量名是固定的,使用 fab 命令去执行的时候会自动读取这些环境变量
  3. from fabric.api import run, env
  4.  
  5. env.hosts = ['192.168.216.130', '192.168.216.131'] # 定义要操作的远程主机
  6. env.user = 'root' # 定义使用哪个用户登录远程主机
  7.  
  8. def getHostname():
  9. run('hostname')
  1. [root@localhost ~]$ fab getHostname
  2. [192.168.216.130] Executing task 'getHostname'
  3. [192.168.216.130] run: hostname
  4. [192.168.216.130] out: localhost.localdomain
  5. [192.168.216.130] out:
  6.  
  7. [192.168.216.131] Executing task 'getHostname'
  8. [192.168.216.131] run: hostname
  9. [192.168.216.131] out: localhost.localdomain
  10. [192.168.216.131] out:
  11.  
  12. Done.
  13. Disconnecting from 192.168.216.131... done.
  14. Disconnecting from 192.168.216.130... done.

Fabric 常用环境变量:

  1. env.hosts # 定义目标主机
  2. env.exclude_hosts # 排除指定主机
  3. env.user # 定义用户名
  4. env.port # 定义端口,默认为 22
  5. env.password # 定义密码
  6. env.roledefs # 定义角色

Fabric 常用 API:

  1. run # 远程执行命令,如 run('hostname')
  2. env # 用于定义内置属性,如 env.hosts = ['ip1', 'ip2', 'ip3', ...]
  3. put # 上传本地文件到远程主机,如 put('/etc/passwd', '/tmp/passwd')
  4. get # 从远程主机下载文件到本地,如 get('/etc/passwd', '/tmp/passwd')
  5. prompt # 获得用户输入信息,如 prompt('please input user password: ')
  6. confirm # 获得提示信息确认,如 confirm('Test failed, Continue[Y/N]: ')

fab 命令:

  1. -H # 指定对哪台远程主机进行操作,如果有多台用逗号隔开
  2. -R # 指定对哪种角色的主机进行操作,角色需要在fabfile.py文件中自定义
  3. -f # 指定fab入口文件,默认入口文件名为fabfile.py
  4. -t # 指定连接到远程主机的超时时间
  5. -T # 指定连接到远程主机后命令执行的超时时间

扩展:Fabric 打印颜色

  1. #!/usr/bin/env python
  2. #-*- coding:utf-8 -*-
  3.  
  4. from fabric.colors import *
  5.  
  6. print red('Hello World')
  7. print blue('Hello World')
  8. print cyan('Hello World')
  9. print white('Hello World')
  10. print green('Hello World')
  11. print yellow('Hello World')
  12. print magenta('Hello World')
  13. print magenta('Hello World', bold=True)

批量执行命令:fabric的更多相关文章

  1. linux集群批量执行命令

    因为工作需要,需要修改集群中机器的配置,一台一台的修改太浪费时间,就想能不能通过自动化脚本批量执行命令,尝试写一个,自己shell不熟悉,写的有点渣渣 if [ "$#" -ne ...

  2. linux下远程服务器批量执行命令及SFTP上传文件 -- python实现

    之前写过一个python远程执行命令的脚本,但在一个性能测试中,要将程序批量分发到不同服务器,程序无法使用,再将之前的脚本更新,加入批量上传的功能.之前脚本地址:http://www.cnblogs. ...

  3. shell脚本批量执行命令----必需判断上一步执行结果--没有捷径

    # 注意:shell脚本批量执行命令,不能只写一个函数,然后把所有命令复制进去,之前试过这样是不行的.必须要有一个判断命令执行成功与否的语句 # 简单的命令可以不加结果判断符号,但是遇到解压包.sed ...

  4. [转] ansible批量执行命令展示

    [From] https://blog.csdn.net/zhydream77/article/details/81223805 ansible命令基础 • ansible <host-patt ...

  5. Perl脚本通过Expect登陆多台设备批量执行命令并Log

    本例子尝试使用Perl脚本借助Expect模块实现如下目的: 登陆多台设备 设备登陆信息按如下格式存放于文件中. $ cat hosts.txt 192.168.30.7:node1:telnet:b ...

  6. Python 实现远程服务器批量执行命令

    paramiko 远程控制介绍 Python paramiko是一个相当好用的远程登录模块,采用ssh协议,可以实现linux服务器的ssh远程登录.首先来看一个简单的例子 import parami ...

  7. windows 批量执行命令的脚本

    因为老板一个电话,我的国庆节就没了....,老板要我写个东西,能批量执行500台windows的命令并返回结果,虽然完成以后是非常的简单,但是因为我走了很多弯路,一开始想用powershell来写,后 ...

  8. ansible安装和批量执行命令

    yum install -y ansible 编辑 /etc/ansible/hosts 文件 # This is the default ansible 'hosts' file.## It sho ...

  9. ssh模仿ansible批量执行命令的功能

    #!/bin/bash ssh_hosts=("IP" "IP1".......) user=root remote_cmd="df -h" ...

随机推荐

  1. sqlserver 若字段定义的类型为datetime

    sqlserver 若字段定义的类型为datetime,插入为''(空),那么会默认值为1900-01-01 00:00:00.000 解决 插入 NULL 或者程序判断

  2. python学习笔记(16)--django的安装

    说明: 1. 直接在cmd输入: pip install Django==1.10.6前提是安装了python,pip并添加了环境变量 2. http://www.lfd.uci.edu/~gohlk ...

  3. C#处理文本文件TXT实例详解(转)

    作者:安静平和 字体:[增加 减小] 类型:转载 时间:2015-02-02我要评论 这篇文章主要介绍了C#处理文本文件TXT的方法,以实例形式详细分析了txt文本文件的读取.修改及打印等功能的实现技 ...

  4. TextBox控件设置ReadOnly=true后台取不到值三种解决方法(转)

    当TextBox设置了ReadOnly=true后要是在前台为控件添加了值,后台是取不到的,值为空,多么郁闷的一个问题经过尝试,发现可以通过如下的方式解决这个问题.感兴趣的朋友可以了解下当TextBo ...

  5. C语言 · 贪心算法

    发现蓝桥杯上好多题目涉及到贪心,决定学一学. 贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择.也就是说:不从整体最优上考虑,而是在某种意义上的局部最优解.其关键是贪心策略的选择,选择的贪心 ...

  6. C++实现顺序计算输入表达式的值

    #include <iostream> #include <cstring> #include <cctype>//判断字符类型需要的头文件 using names ...

  7. 系统优化 /etc/sysctl.conf

    # sysctl settings are defined through files in # /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl ...

  8. namp命令详解

    我将用两个不同的部分来涵盖大部分NMAP的使用方法,这是nmap关键的第一部分.在下面的设置中,我使用两台已关闭防火墙的服务器来测试Nmap命令的工作情况. 192.168.0.100 – serve ...

  9. eclipse新建python项Project interpreter not specified

    安装好pydev后新建python项目时提示”Project interpreter not specified“的错误,这是因为没有导入python开发环境所致 解决方法如下:1.找到eclipse ...

  10. MapReduce初探

    转自 :http://blog.itpub.net/28912557/viewspace-1127423/ Map-Reduce处理过程(分析气象数据的map-reduce过程)1,调用标准的inpu ...