Fabric:Python SSH 远程执行利器

Fabric 是一个高层次的 Python 库,专为通过 SSH 远程执行 shell 命令设计,斩获了 15k+ 的 Star。

Fabric 构建在 Invoke(本地子进程执行和命令行功能)和 Paramiko(SSH 协议实现)之上,将两者的 API 进行整合,提供额外功能。用户可以用它编写 Python 脚本,批量管理远程服务器。很多团队在部署流程、服务器巡检、日志收集等场景中使用 Fabric。它把 SSH 操作变成了 Python 代码,不需要手写一堆 shell 脚本,也不用记复杂的 ssh 命令参数。

Fabric 的核心能力:

远程命令执行:通过 SSH 连接远程主机,执行 shell 命令并获取返回结果。结果以 Python 对象形式返回,包含 stdout、stderr 和 return_code,方便在代码中做后续判断和处理。连接池会自动管理会话,不需要手动处理连接建立和断开。

任务自动化:借助 Invoke 的任务系统,可以将常用操作封装为 task 函数。部署、重启、备份这些重复工作,写一次就可以反复调用。任务之间支持依赖关系,可以定义前置和后置操作。

主机管理和并行执行:支持按角色对主机分组,不同角色执行不同命令。比如 web 服务器跑一套命令,数据库服务器跑另一套,适合复杂的集群场景。同时对多台主机执行命令,配合超时控制和失败处理策略,批量操作效率明显高于串行脚本。

安装使用

Fabric 安装很简单,直接通过 pip 安装:

复制代码
pip install fabric

Fabric 2.x 支持 Python 3.x 版本,相比 1.x 在设计上有较大改进。Connection 对象是整个 API 的核心,所有操作都围绕它展开。

编写一个简单的 fabfile.py

python 复制代码
from fabric import Connection

def disk_free(c):
    result = c.run('df -h /', hide=True)
    print(result.stdout)

在命令行中运行:

c 复制代码
fab -H web-1,web-2 disk-free

这段代码会连接 web-1 和 web-2 两台机器,执行磁盘空间检查,输出每台机器的磁盘使用情况。Fabric 会自动处理 SSH 密钥认证、known_hosts 检查等底层细节。

文件传输同样简洁:

python 复制代码
from fabric import Connection
c = Connection('web-server')
c.put('config.yaml', '/etc/myapp/config.yaml')
c.get('/var/log/app.log', './app.log')

put 方法上传文件,get 方法下载文件。传输过程中自动处理压缩和进度显示,大文件传输也有较好的性能表现。结合临时文件目录和校验机制,文件传输的可靠性有保障。

组合使用效果更好。一个典型的部署任务可以这样写:

python 复制代码
from fabric import task

@task
def deploy(c):
    c.run('git pull origin main')
    c.run('pip install -r requirements.txt')
    c.run('systemctl restart myapp')
    c.run('systemctl status myapp')

在命令行执行 fab deploy,所有步骤自动完成。出错时 Fabric 会抛出异常并给出清晰的错误信息,方便定位问题。

Fabric 在同类工具中定位清晰。Ansible 功能全面但有额外的 YAML 学习成本,Paramiko 偏底层需要自己处理很多细节,Fabric 正好处于中间位置,既保持了 Python 的简洁性,又提供了足够的生产力。对于日常管理几十台服务器的场景,Fabric 是一个轻量且实用的选择。需要批量执行命令、自动化部署或文件分发时,不妨试试这个工具。

相关推荐
赖龙2 小时前
pnpm vs npm
前端·npm·node.js
学如逆水,不进则退3 小时前
在线免费音频剪辑:NBTools 可视化波形裁剪 MP3/WAV,本地处理免上传
前端·音视频
Mh3 小时前
虚拟滚动真的比普通滚动性能更好吗?
前端·javascript·性能优化
pe7er3 小时前
React + Ant Design 中的 IME (输入法合成)安全输入组件
前端
Super 含4 小时前
Android 启动优化(二):TTID、TTFD 与 Macrobenchmark 启动性能测量
前端
Python私教4 小时前
别急着加 llms.txt:企业官网面向 AI 搜索的工程清单
前端·人工智能·seo
东方小月4 小时前
从零开发一个 Coding Agent(十三):实现安全的 read 文件读取工具
前端·人工智能·全栈
东方小月4 小时前
从零开发一个 Coding Agent(十二):实现版本化 JSONL 与真实 CLI 入口
前端·设计模式·前端框架
FL16238631295 小时前
室内易燃物识别易燃评估室内易燃程度识别分割数据集labelme格式1015张85类别
java·服务器·前端
用户059540174465 小时前
把 AI 长期记忆去重测试从 20 分钟压到 40 秒,重复率从 18% 干到 1.5%
前端·css