fabric是基于paramiko的ssh远程命令的再次封装,功能更强大
python3.6 pip -V # pip3
pip install fabric3
## from fabric.api import *
local #执行本地命令,如local('uname -s')
lcd #切换本地目录,如lcd('/home')
cd #切换远程目录,如cd('/var/logs')
run #执行远程命令,如run('free -m')
sudo #sudo方式执行远程命令,如sudo('/etc/init.d/httpd start')
put #上次本地文件导远程主机,如put('/home/user.info','/data/user.info')
get #从远程主机下载文件到本地,如:get('/data/user.info','/home/user.info')
prompt #获得用户输入信息,如:prompt('please input user password:')
reboot #重启远程主机,如:reboot()
env #环境变量
@task #函数修饰符,标识的函数为 fab 可调用的,不标记的对 fab 不可见。`fab list`
@runs_once #函数修饰符,标识的函数只会执行一次,不受多台主机影响
@roles #函数修饰符,配合 env.roledefs 的角色使用
with xx: #上下关联
with settings(hide('warnings','running','stderr','stdout','everything',warn_only=True)):
#指定输出内容,异常不操作
## from fabric.colors import *
print blue(text)
print cyan(text)
print green(text)
print magenta(text)
print red(text)
print white(text)
print yellow(text)
## from fabric.contrib.console import confirm
confirm #获得提示信息确认,如:confirm('Test failed,Continue[Y/N]?')
vi fabfile.py
def hello():
print("Hello world!")
fab hello
运行结果: Hello world! Done. fab -f test.py hello (非默认fabfile.py需要指定)
vi fabfile.py
from fabric.api import local, lcd
def lsfab():
with lcd('~/'): #with 上下关联,下面继承路径
local('ls')
fab lsfab
vi fabfile.py
from fabric.api import env,prompt
env.user = 'root'
env.hosts = str(input("输入主机:\n"))
@runs_once #只匹配一次,避免每个主机处理都输入一次
def input_raw():
return prompt("请输入密码",default="123456")
def cmd (name):
env.password = input_raw()
run(name)
fab cmd:name="uptime"
@parallel(pool_size=5) #使用@parallel装饰器
def cmd (name):
env.password = input_raw()
run(name)
fab -P -z 5 #命令行参数
http://list.attacker.club/scripts/python/fabric_file/fabfile.py
fab list
#查看自定义方法
fab ping #主机ping测试
fab cmd:name="ifconfig eth0 |grep inet " #批量执行命令
fab do #指定fabfile.py中do函数运行的命令
fab upload # 上传
fab download # 下载