Fabric 能夠經過 SSH 在多臺客戶端主機上批量執行任務,是基於 paramiko 封裝開發的,paramiko 更底層一些,安裝方法以下:python
[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 使用環境變量:api
[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:dom
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 命令:ssh
-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)