Day 082 — 远程自动化架构图解
SSH 连接流程
┌──────────────┐ ┌──────────────┐
│ 客户端 │ │ 服务端 │
│ (Python) │ │ (SSHD) │
├──────────────┤ ├──────────────┤
│ │ ① TCP 三次握手 │ │
│ │─────────────────────────────►│ │
│ │◄─────────────────────────────│ │
│ │ │ │
│ │ ② SSH 协议版本协商 │ │
│ │─────────────────────────────►│ │
│ │◄─────────────────────────────│ │
│ │ │ │
│ │ ③ 算法协商 (加密/压缩/签名) │ │
│ │─────────────────────────────►│ │
│ │◄─────────────────────────────│ │
│ │ │ │
│ │ ④ 密钥交换 (Diffie-Hellman) │ │
│ │─────────────────────────────►│ │
│ │◄─────────────────────────────│ │
│ │ │ │
│ │ ⑤ 服务端验证 │ │
│ │◄─────────────────────────────│ │
│ │ │ │
│ │ ⑥ 认证 (密码/密钥/公钥) │ │
│ │─────────────────────────────►│ │
│ │◄─────────────────────────────│ │
│ │ │ │
│ │ ⑦ 通道建立 (Session/Channel) │ │
│ │─────────────────────────────►│ │
│ │◄─────────────────────────────│ │
│ │ │ │
│ │ ⑧ 命令执行 / 文件传输 │ │
│ │─────────────────────────────►│ │
│ │◄─────────────────────────────│ │
└──────────────┘ └──────────────┘
Paramiko vs Fabric 架构对比
Paramiko(底层 SSH 库):
┌─────────────────────────────────────────┐
│ 你的代码 │
├─────────────────────────────────────────┤
│ paramiko.SSHClient │
│ ┌─────────┐ ┌──────────┐ │
│ │ Transport│ │ Channel │ │
│ │ (加密) │ │ (命令通道)│ │
│ └─────────┘ └──────────┘ │
├─────────────────────────────────────────┤
│ SSH 协议实现 │
│ 密钥交换 │ 加密 │ 认证 │ 压缩 │
└─────────────────────────────────────────┘
Fabric(高级运维框架):
┌─────────────────────────────────────────┐
│ 你的代码 │
│ conn.run('ls') conn.put('a','b') │
├─────────────────────────────────────────┤
│ fabric.Connection │
│ ┌─────────────────────────┐ │
│ │ 内置连接管理 & 错误处理 │ │
│ └─────────────────────────┘ │
├─────────────────────────────────────────┤
│ paramiko.SSHClient │
│ ┌─────────┐ ┌──────────┐ │
│ │ Transport│ │ Channel │ │
│ └─────────┘ └──────────┘ │
├─────────────────────────────────────────┤
│ SSH 协议实现 │
└─────────────────────────────────────────┘
批量运维架构
┌──────────────┐
│ 控制节点 │
│ (Python) │
└──────┬───────┘
│
┌──────────────┼──────────────┐
│ │ │
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 服务器 01 │ │ 服务器 02 │ │ 服务器 03 │
│ 192.168.1.101│ │ 192.168.1.102│ │ 192.168.1.103│
│ ┌────────┐ │ │ ┌────────┐ │ │ ┌────────┐ │
│ │ SSHD │ │ │ │ SSHD │ │ │ │ SSHD │ │
│ └────────┘ │ │ └────────┘ │ │ └────────┘ │
└──────────────┘ └──────────────┘ └──────────────┘
┌─────────────────────────────────────────────────┐
│ 巡检流程 │
│ 1. 建立 SSH 连接 │
│ 2. 执行系统命令 (uptime/free/df) │
│ 3. 解析输出获取指标 │
│ 4. 对比阈值判断健康状态 │
│ 5. 生成报告 & 告警通知 │
└─────────────────────────────────────────────────┘
安全认证方式对比
密码认证: 密钥认证:
┌──────────────┐ ┌──────────────┐
│ 客户端发送 │ │ 客户端证明 │
│ 用户名+密码 │ │ 持有私钥 │
│ (加密传输) │ │ (签名验证) │
├──────────────┤ ├──────────────┤
│ 服务端验证 │ │ 服务端验证 │
│ 密码是否匹配 │ │ 签名是否有效 │
├──────────────┤ ├──────────────┤
│ ✅ 简单易用 │ │ ✅ 更安全 │
│ ❌ 易被暴力破解│ │ ✅ 无需传输密码│
│ ❌ 密码需定期更换│ │ ✅ 支持 Agent │
└──────────────┘ └──────────────┘