Python 运维自动化:从 paramiko 到 Ansible

paramiko:SSH 批量管理基础 paramiko 是 Python 实现的 SSHv2 协议库,是运维自动化的底层基石。当需要精细控制 SSH 连接、处理非标准场景时,paramiko 提供了最大灵活性。 基础连接与命令执行 import paramiko import time def ssh_exec(host, port, username, password, command): """基础 SSH 命令执行""" client = paramiko.SSHClient() # 自动添加主机密钥(生产环境建议使用 known_hosts) client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: client.connect(host, port=port, username=username, password=password, timeout=10) stdin, stdout, stderr = client.exec_command(command) # 获取退出码 exit_code = stdout.channel.recv_exit_status() output = stdout.read().decode().strip() error = stderr.read().decode().strip() return { 'host': host, 'exit_code': exit_code, 'output': output, 'error': error } finally: client.close() # 使用示例 result = ssh_exec('10....

October 31, 2024 · 4 分钟 · 852 字 · 徐保金

Ansible Vault 密码管理:敏感数据加密实战指南

概述 在自动化运维中,Ansible Playbook 经常需要处理数据库密码、API 密钥、SSH 私钥等敏感信息。如果这些数据以明文形式存储在代码仓库中,一旦仓库泄露,所有凭据都将暴露。Ansible Vault 作为 Ansible 内置的加密工具,通过 AES-256 对称加密算法保护敏感数据,确保只有授权用户才能访问。 我将从基础概念到生产实践,详细梳理 Ansible Vault 的使用方法、密码管理策略,以及在 CI/CD 流水线中的集成方案。 为什么需要 Ansible Vault 明文存储的风险 在实际运维中,敏感信息散落在多个位置: 位置 常见敏感数据 风险等级 group_vars/all.yml 数据库密码、Redis 密码 高 host_vars/web01.yml SSH 连接密码、BECOME 密码 高 Inventory 文件 ansible_password、ansible_ssh_pass 高 Playbook 变量 API Token、第三方密钥 中 Jinja2 模板 证书私钥、JWT Secret 高 明文存储的风险包括: 代码仓库泄露:Git 历史记录中永远保留明文密码,即使后续删除也能从历史中恢复 合规审计失败:PCI-DSS、ISO 27001 等安全标准要求敏感数据加密存储 团队协作风险:任何有仓库访问权限的人都能看到所有密码 日志泄露:Ansible 执行日志可能输出变量值,导致密码出现在日志文件中 Ansible Vault 的定位 Ansible Vault 不是唯一的密钥管理方案,但它是 Ansible 生态中最直接的选择: 方案 优点 缺点 适用场景 Ansible Vault 内置、零依赖、YAML 原生 单密码加密、无细粒度权限 中小规模团队、快速上手 HashiCorp Vault 动态密钥、租约管理、审计日志 需要额外部署和维护 大型企业、高安全要求 AWS Secrets Manager 云原生、自动轮转 厂商锁定、按量计费 AWS 云环境 SOPS + age 支持多密钥加密、Git 友好 需要额外工具 多人协作、GitOps 场景 参考 Ansible Vault 官方文档 了解完整功能列表。...

September 5, 2024 · 8 分钟 · 1572 字 · 徐保金

Ansible Playbook 最佳实践:从入门到生产部署

概述 Ansible 的上手门槛很低——一个 YAML 文件、几行 yum install 就能跑通。但当你面对几百台服务器、多套环境、复杂的依赖关系和严格的变更审计要求时,“能跑"和"能上线"之间隔着一整个工程体系。本文把生产级 Playbook 的核心实践浓缩成一份可操作的指南,涵盖从结构组织到性能优化的全链路。 参考来源:Ansible 官方好的实践 一、Playbook 结构优化 1.1 目录布局 生产级 Ansible 项目应该遵循标准目录结构。这不是 Ansible 的强制要求,而是大量团队踩坑后形成的共识: production-project/ ├── ansible.cfg # 项目级配置 ├── inventory/ │ ├── production/ │ │ ├── hosts.ini # 生产环境主机清单 │ │ └── group_vars/ │ │ ├── all.yml # 所有环境共享变量 │ │ ├── web.yml # web 组专用变量 │ │ └── db.yml # db 组专用变量 │ └── staging/ │ ├── hosts.ini │ └── group_vars/ │ └── all....

April 5, 2024 · 10 分钟 · 2014 字 · 徐保金