python包fabric包作用

Fabric 是面向运维自动化的 Python 库,核心定位是通过 SSH 在多台远程机器上批量执行命令

一句话概括: 用 Python 代码代替 SSH + 敲命令,把运维操作编排成脚本,一键执行。


定位对比

  • pexpect 管”一个程序”的自动交互
  • Fabric 管”多台机器”的批量运维
  • Ansible 管”大规模集群”的配置管理

Fabric 处于中间层,比 pexpect 封装度高,比 Ansible 轻量,适合中小型运维场景


Fabric 能做什么

场景 说明
批量执行命令 同时在 100 台机器上重启、查日志
文件上传下载 批量部署代码、配置文件
代码部署 打包 → 上传 → 校验 → 解压 → 执行,全流程自动化
Git 同步 本地 commit → push,远程 pull,一键部署
系统管理 批量修改配置、安装软件、管理用户

Fabric参数接收机制

Fabric 如何接收输入、参数和执行方式,分三个层面:

1. 命令行参数

1
2
3
4
5
6
7
8
# 列出所有任务
fab -l

# 指定主机执行任务
fab -H 192.168.17.192,192.168.17.193 deploy

# 指定入口文件
fab -f myfabfile.py go
参数 作用
-l 列出所有 @task 标记的任务
-H 指定目标主机,逗号分隔
-f 指定 fabfile 文件名(默认 fabfile.py)
-p 指定并发线程数
-w 任何主机命令失败时立即停止

2. 脚本内接收参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from fabric.api import *

# 方式一:env 全局配置
env.hosts = ['192.168.17.192', '192.168.17.193']
env.user = 'itcast'
env.password = 'python'

# 方式二:@runs_once + prompt() 交互接收
@runs_once
def input_raw():
return prompt("please input directory name:", default="/home")

def workask(dirname):
run('ls -l ' + dirname)

@task
def go():
getdirname = input_raw() # 运行时提示用户输入
workask(getdirname)

3. 数据流

命令行参数 (-H, -f)
    ↓
env 全局配置 (host, user, password)
    ↓
@task 任务函数被调用
    ↓
API 函数执行 (run/put/get/local)
    ↓
SSH 连接 → 远程执行 → 返回结果

核心 API 速查

API 作用 示例
run() 远程执行命令 run('ls -l')
local() 本地执行命令 local('git status')
put() 本地→远程上传 put('app.py', '/home/app.py')
get() 远程→本地下载 get('/var/log/app.log', './app.log')
sudo() 远程以 root 执行 sudo('apt update')
cd() 远程切换目录 with cd('/home'):
lcd() 本地切换目录 with lcd('/src'):
reboot() 重启远程主机 reboot()

运行示例

1
2
3
4
5
6
7
8
# 一键部署
fab deploy

# 指定主机部署
fab -H 192.168.17.192 deploy

# 指定密码
fab -H 192.168.17.192 --password=python deploy