批量执行命令:fabric
Fabric 可以通过 SSH 在多台客户端主机上批量执行任务,是基于 paramiko 封装开发的,paramiko 更底层一些,安装方法如下:
- [root@localhost ~]$ yum install -y gcc python-pip python-devel # 安装基础软件包
- [root@localhost ~]$ pip install pycrypto==2.3 # 安装 paramiko 的依赖包,paramiko 使用 ssh 登录需要用到 pycrypto 来提供加密算法,保证 ssh 安全性
- [root@localhost ~]$ pip install paramiko==1.12.4 # 安装 Fabric 的依赖包,Fabric 是基于 paramiko 封装的
- [root@localhost ~]$ pip install fabric==1.8.3 # 最后安装 Fabric,安装之后会提供 fab 命令,也会提供很多 Fabric 的 API
Fabric 简单用法:
- [root@localhost ~]$ cat fabfile.py # 需要定义一个fabfile.py文件,文件名是固定的
from fabric.api import run # 使用Fabric提供的API,run用来远程执行命令- def getHostname(): # 定义一个函数,用来获取主机名
- run('hostname')
- [root@localhost ~]$ fab -H 192.168.216.130 getHostname # 通过 fab 命令来调用 fabfile.py 文件
- [192.168.216.130] Executing task 'getHostname' # -H 192.168.216.130 用于指定对哪个远程主机进行操作
- [192.168.216.130] run: hostname # getHostname 表示执行 fabfile.py 文件里的哪个函数
- [192.168.216.130] out: localhost.localdomain # 注意:使用 Fabric 的前提是保证 ssh 可以通过密钥登录
- [192.168.216.130] out: Done.
- Disconnecting from 192.168.216.130... done.
Fabric 使用环境变量:
- [root@localhost ~]$ cat fabfile.py # 可以在 fabfile.py 里通过 env 自定义环境变量
- # 这些环境变量的变量名是固定的,使用 fab 命令去执行的时候会自动读取这些环境变量
- from fabric.api import run, env
- env.hosts = ['192.168.216.130', '192.168.216.131'] # 定义要操作的远程主机
- env.user = 'root' # 定义使用哪个用户登录远程主机
- def getHostname():
- run('hostname')
- [root@localhost ~]$ fab getHostname
- [192.168.216.130] Executing task 'getHostname'
- [192.168.216.130] run: hostname
- [192.168.216.130] out: localhost.localdomain
- [192.168.216.130] out:
- [192.168.216.131] Executing task 'getHostname'
- [192.168.216.131] run: hostname
- [192.168.216.131] out: localhost.localdomain
- [192.168.216.131] out:
- Done.
- Disconnecting from 192.168.216.131... done.
- Disconnecting from 192.168.216.130... done.
Fabric 常用环境变量:
- env.hosts # 定义目标主机
- env.exclude_hosts # 排除指定主机
- env.user # 定义用户名
- env.port # 定义端口,默认为 22
- env.password # 定义密码
- env.roledefs # 定义角色
Fabric 常用 API:
- run # 远程执行命令,如 run('hostname')
- env # 用于定义内置属性,如 env.hosts = ['ip1', 'ip2', 'ip3', ...]
- put # 上传本地文件到远程主机,如 put('/etc/passwd', '/tmp/passwd')
- get # 从远程主机下载文件到本地,如 get('/etc/passwd', '/tmp/passwd')
- prompt # 获得用户输入信息,如 prompt('please input user password: ')
- confirm # 获得提示信息确认,如 confirm('Test failed, Continue[Y/N]: ')
fab 命令:
- -H # 指定对哪台远程主机进行操作,如果有多台用逗号隔开
- -R # 指定对哪种角色的主机进行操作,角色需要在fabfile.py文件中自定义
- -f # 指定fab入口文件,默认入口文件名为fabfile.py
- -t # 指定连接到远程主机的超时时间
- -T # 指定连接到远程主机后命令执行的超时时间
扩展:Fabric 打印颜色
- #!/usr/bin/env python
- #-*- coding:utf-8 -*-
- from fabric.colors import *
- print red('Hello World')
- print blue('Hello World')
- print cyan('Hello World')
- print white('Hello World')
- print green('Hello World')
- print yellow('Hello World')
- print magenta('Hello World')
- print magenta('Hello World', bold=True)
批量执行命令:fabric的更多相关文章
- linux集群批量执行命令
因为工作需要,需要修改集群中机器的配置,一台一台的修改太浪费时间,就想能不能通过自动化脚本批量执行命令,尝试写一个,自己shell不熟悉,写的有点渣渣 if [ "$#" -ne ...
- linux下远程服务器批量执行命令及SFTP上传文件 -- python实现
之前写过一个python远程执行命令的脚本,但在一个性能测试中,要将程序批量分发到不同服务器,程序无法使用,再将之前的脚本更新,加入批量上传的功能.之前脚本地址:http://www.cnblogs. ...
- shell脚本批量执行命令----必需判断上一步执行结果--没有捷径
# 注意:shell脚本批量执行命令,不能只写一个函数,然后把所有命令复制进去,之前试过这样是不行的.必须要有一个判断命令执行成功与否的语句 # 简单的命令可以不加结果判断符号,但是遇到解压包.sed ...
- [转] ansible批量执行命令展示
[From] https://blog.csdn.net/zhydream77/article/details/81223805 ansible命令基础 • ansible <host-patt ...
- Perl脚本通过Expect登陆多台设备批量执行命令并Log
本例子尝试使用Perl脚本借助Expect模块实现如下目的: 登陆多台设备 设备登陆信息按如下格式存放于文件中. $ cat hosts.txt 192.168.30.7:node1:telnet:b ...
- Python 实现远程服务器批量执行命令
paramiko 远程控制介绍 Python paramiko是一个相当好用的远程登录模块,采用ssh协议,可以实现linux服务器的ssh远程登录.首先来看一个简单的例子 import parami ...
- windows 批量执行命令的脚本
因为老板一个电话,我的国庆节就没了....,老板要我写个东西,能批量执行500台windows的命令并返回结果,虽然完成以后是非常的简单,但是因为我走了很多弯路,一开始想用powershell来写,后 ...
- ansible安装和批量执行命令
yum install -y ansible 编辑 /etc/ansible/hosts 文件 # This is the default ansible 'hosts' file.## It sho ...
- ssh模仿ansible批量执行命令的功能
#!/bin/bash ssh_hosts=("IP" "IP1".......) user=root remote_cmd="df -h" ...
随机推荐
- sqlserver 若字段定义的类型为datetime
sqlserver 若字段定义的类型为datetime,插入为''(空),那么会默认值为1900-01-01 00:00:00.000 解决 插入 NULL 或者程序判断
- python学习笔记(16)--django的安装
说明: 1. 直接在cmd输入: pip install Django==1.10.6前提是安装了python,pip并添加了环境变量 2. http://www.lfd.uci.edu/~gohlk ...
- C#处理文本文件TXT实例详解(转)
作者:安静平和 字体:[增加 减小] 类型:转载 时间:2015-02-02我要评论 这篇文章主要介绍了C#处理文本文件TXT的方法,以实例形式详细分析了txt文本文件的读取.修改及打印等功能的实现技 ...
- TextBox控件设置ReadOnly=true后台取不到值三种解决方法(转)
当TextBox设置了ReadOnly=true后要是在前台为控件添加了值,后台是取不到的,值为空,多么郁闷的一个问题经过尝试,发现可以通过如下的方式解决这个问题.感兴趣的朋友可以了解下当TextBo ...
- C语言 · 贪心算法
发现蓝桥杯上好多题目涉及到贪心,决定学一学. 贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择.也就是说:不从整体最优上考虑,而是在某种意义上的局部最优解.其关键是贪心策略的选择,选择的贪心 ...
- C++实现顺序计算输入表达式的值
#include <iostream> #include <cstring> #include <cctype>//判断字符类型需要的头文件 using names ...
- 系统优化 /etc/sysctl.conf
# sysctl settings are defined through files in # /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl ...
- namp命令详解
我将用两个不同的部分来涵盖大部分NMAP的使用方法,这是nmap关键的第一部分.在下面的设置中,我使用两台已关闭防火墙的服务器来测试Nmap命令的工作情况. 192.168.0.100 – serve ...
- eclipse新建python项Project interpreter not specified
安装好pydev后新建python项目时提示”Project interpreter not specified“的错误,这是因为没有导入python开发环境所致 解决方法如下:1.找到eclipse ...
- MapReduce初探
转自 :http://blog.itpub.net/28912557/viewspace-1127423/ Map-Reduce处理过程(分析气象数据的map-reduce过程)1,调用标准的inpu ...