← 返回 Day 82 正文

Day 82 · 图解

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  │
└──────────────┘                 └──────────────┘