4个案例让我喜欢上 AI 直接运维

4个案例让我喜欢上 AI 直接运维

  • 这篇笔记总结了近两个月使用 Claude Code CLI 处理日常运维工作的 4 个案例。

  • 我选择了个人感觉能突出 AI 知识广度、效率、准确性且不涉及业务数据安全的几个例子分享。

  • 内容总览

    • SSH 登录操作服务器
    • 根据文档执行 Linux 系统初始化、内核优化、服务安装,最后生成 Skill。
    • 英伟达 GPU 显卡驱动安装
    • 通过二进制日志恢复 MySQl 删除的数据
  • 让 AI 自己做决策部署服务,比如中间件、数据库对 AI 来说是很简单的事情,唯一需要考虑的就是规范性。例如部署方式、数据持久化、密码安全要求、是否做性能优化、后期可维护性等等。

  • AI 直接运维核心是人类提出一个目标后:AI 自行操作 ---> AI 获取执行结果 ---> AI 根据结果判断下一步操作 ---> 如此往复循环 ---> 直至达到人类提出的目标结束

环境说明

我使用的是 Claude Code ,还有其他的辅助编程智能体,比如 Codex ,使用方式都相同。

  • 个人笔记本:MacbookAir M1(需要能连接世界互联网)
  • Claude Code CLI 工具
  • Claude Code 账号
  • 服务器系统 Ubuntu 22.04

例1 SSH 免密登录

AI 智能体无法执行交互操作,如果要让 AI 去登录服务器操作,就需要配置笔记本到服务器的免密登录(在 AI 之前这也是推荐安全的登录方式)。

3761791-20260407132122118-52957073

配置免密登录

命令行配置免密登录

ssh-copy-id user@host

也可以使用脚本,工具等批量配置免密登录,这个相对灵活。

Skill编写

Skill 使用可以看 Claude Code CLI 使用技巧(干货总结):https://www.cnblogs.com/keepriding/p/19839809

因为我平时使用笔记本自带的终端工具登录服务器,所以把服务器的用户名和 IP 都写在了子文件中,放在了不同目录,以此来进行分类。如果只免密登录,Skill --- 下面的说明内容只保留最后一条并稍作修改,即 使用方法: ssh user@host command 即可免密执行服务器命令

编辑 SKILL.md
shn@shndeMacBook-Air skills % cat ~/.claude/skills/ssh/SKILL.md

name: ssh 免密码登录服务器
description: 这是免密登录各类服务器的方法
---
- 在 ~/.ssh/config.d 配置了可以免密登录服务器的信息,以不同的目录划分服务器,保持了一种树状结构,可以使用 tree ~/.ssh/config.d 查看
- 子配置文件命名是描述性的,可以大概理解出这台服务器主要功能,并且包含了对应的 IP
- 子配置文件内容中的 Host 字段严格按照对应的服务器 IP 命名
- 使用方法: ssh `Host` command 即可免密执行服务器命令

实际效果

提示词:把 xxx.regkey 文件传到火山云测试环境的41服务器/data/nginx-download

微信图片_20260428142014_923_7-redacted_dot_app

  • 可以看到,AI 加载了 ssh 这个 Skill,并且成功将文件传输到了指定服务器的指定目录。
  • 因为我使用目录管理不同的服务器 ssh 登录信息的子配置文件,且目录、子配置文件命名都具有 IP+功能描述,所以我提示“火山云测试环境的 41 服务器”这类模糊性描述,AI 就能根据发现的 Skill 查到具体的IP地址。
  • 直接把服务器具体 IP 给 AI 会更加准确。
  • 后续再排查问题时,就可以将问题描述或者截图给 AI ,让其登录服务器排查或者查看日志。

AI 运维宪法

  • 通过 CLAUDE.md 给 AI 约定一些必须遵守的事项,这样每次与其交流时,就不用再重复这些内容

  • CLAUDE.md 使用可以看 Claude Code CLI 使用技巧(干货总结):https://www.cnblogs.com/keepriding/p/19839809

编写 CLAUDE.md
shn@shndeMacBook-Air ~ % cat ~/.claude/CLAUDE.md

## 语言
使用简体中文

## 运维习惯
### 部署与问题排查
- 拿到一个新环境部署项目时,先查看磁盘挂载情况。如果有独立的数据盘,就把服务部署到独立的数据盘。如果没有,再部署到 / 系统下。
- 没有给出明确的环境信息的时候,排查问题或者部署的时候,先查看是否安装了 Docker 或者 Kubernetes。
- 如果使用 Docker 部署服务,要使用 Docker Compose。如果只是测试,用完就删除,可以使用 docker 命令行。
- 查找到服务后,启停时,优先查看是否有 YAML 文件或者脚本,验证脚本或 YAML 文件和正在运行的程序是否对应,如果没有再通过其他方式启停。
- 修改重要的配置文件前进行备份,备份的文件有时间戳,例如: /etc/fstab-2025-08-08
- 目录、文件命名尽量见名知意。减少无法理解的缩写命名,除非单词非常长。

例2 AI 执行部署文档

在人工运维中,积累很多的笔记文档,通用性比较强的,可以把文档给到 AI ,让其登录服务器执行,并且最后根据实际执行结果写成 Skill ,方便以后调用。

系统初始化

个人文档示例

这是以前根据个人习惯总结的 Ubuntu 系统初始化步骤
基础配置

配置时间同步

*/5 * * * * /usr/sbin/ntpdate time2.aliyun.com &>/dev/null

设置时区

timedatectl set-timezone Asia/Shanghai

关闭防火墙

ufw status
systemctl stop ufw
systemctl disable ufw

安装docker

  1. 首先,更新软件包索引,并且安装必要的依赖软件,来添加一个新的 HTTPS 软件源:

    sudo apt update
    sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
    
  2. 将清华 Docker 版本库的 GPG 密钥添加到系统中

    curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    
  3. 添加国内 Docker 镜像源 这条命令会自动检测你的系统版本($(lsb_release -cs)),避免版本不匹配的问题

    echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
    
  4. sudo apt update
    
  5. 查看可以安装的docker

     apt-cache madison docker-ce
    
  6. 安装指定版本docker

    #apt -y install docker-ce=5:27.5.1-1~ubuntu.20.04~focal
    apt -y install docker-ce=5:28.5.2-1~ubuntu.22.04~jammy
    
    docker version #查看版本
    
  7. 启动docker

    systemctl start docker
    systemctl enable docker
    
  8. 如果不想用 sudo 来执行 docker 命令,需要将该用户加入docker组中

    然后退出重新登录及可使用docker

    sudo usermod -aG docker ${USER}
    
  9. 优化docker日志配置

    cat > /etc/docker/daemon.json <<EOF
    {
      "registry-mirrors": [
        "https://docker.m.daocloud.io",
        "https://huecker.io",
        "https://dockerhub.timeweb.cloud",
        "https://noohub.net"
      ],
      "live-restore": true,
      "default-ulimits": {
        "nofile": {
          "Name": "nofile",
          "Hard": 65536,
          "Soft": 65536
        }
      },
      "data-root": "/data/docker",
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "200m",
        "max-file": "3",
        "labels": "production_status",
        "env": "os,customer"
      }
    }
    EOF
    
    • 重启:systemctl daemon-reload && systemctl restart docker

配置history

vim /etc/profile

# 内存中保留 10000 条
export HISTSIZE=10000
# 文件中永久保存 10000 条
export HISTFILESIZE=10000
# (可选) 增加时间戳格式(您之前配过的)
export HISTTIMEFORMAT="{\"TIME\":\"%F %T\",\"IP\":\"$(ip a | grep -E '192.168|172' | head -1 | awk '{print $2}' | cut -d/ -f1)\",\"LI\":\"$(who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g')\",\"LU\":\"$(who am i|awk '{print $1}')\",\"NU\":\"${USER}\",\"CMD\":\""

生效:source /etc/profile

系统优化

  1. 内核参数调优 (Kernel / Sysctl)。针对高并发服务(Java 微服务、Nginx、Redis、AI 推理),Linux 默认参数往往太保守。

    vim /etc/sysctl.conf

    # 1. 扩大文件句柄上限 (解决 Too many open files)
    # 注意:这是系统级硬上限,配合 docker ulimit 使用
    fs.file-max = 2097152
    
    # 2. 开启 TCP 连接复用 (解决大量 TIME_WAIT 问题)
    # 适用于高并发 API 服务
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_fin_timeout = 30
    
    # 3. 调整 Swap 使用策略
    # 生产环境尽量少用 swap,除非内存真的爆了 (默认是 60,建议改为 10 或 1)
    # 对于 K8s/Java 应用,Swap 导致 GC 卡顿比 OOM 更难受
    vm.swappiness = 10
    
    # 4. 增加连接队列长度 (防止突发流量被拒绝)
    net.core.somaxconn = 32768
    net.ipv4.tcp_max_syn_backlog = 16384
    
    # 5. 内存映射区上限
    vm.max_map_count = 2000000
    

    sysctl -p 生效

  2. 系统资源限制 (Limits)

    vim /etc/security/limits.conf

    # 适用于所有普通用户
    * soft nofile 65535
    * hard nofile 65535
    * soft nproc 65535
    * hard nproc 65535
    
    # 显式适用于 root 用户
    root soft nofile 65535
    root hard nofile 65535
    root soft nproc 65535
    root hard nproc 65535
    

    验证:

    # 查看软限制 (Soft Limit) - 也就是当前生效的值
    ulimit -n
    
    # 查看所有限制 (包括硬限制 Hard Limit)
    ulimit -a
    

AI 执行文档

给 AI 提示词:在桌面有一个基础环境配置的 markdown 文档,你读一下,然后到服务器上去执行一下里面的步骤

截屏2026-05-13 13.37.31

此处省略中间 AI 执行过程......

最后执行完的输出信息:

截屏2026-05-13 13.40.01

执行的效果很好,接着给 AI 提示词:写成一个SKILL
截屏2026-05-13 13.42.26

截屏2026-05-13 13.43.35-redacted_dot_app

例3 英伟达驱动安装

  • 要安装驱动的是一个安装了 RTX 4090(48GB)的工作站,安装了 Ubuntu 22.04 系统。
  • 安装并非一路顺风,而是在安装过程中根据安装程序的 报错提示 设置环境,所以让 AI 自己安装,自己查看报错,根据报错自己修正配置是效率最高的。

安装过程

让 AI 把我电脑上的 NVIDIA-Linux-x86_64-580.126.09.run 驱动安装程序上传到服务器,然后执行安装脚本。执行过程中 AI 提示需要在微星主板 BIOS 中关掉 Secure Boot,这个它无法操作,所以让它复原环境,等我修改好 BIOS 后再重新执行安装程序。

截屏2026-05-13 14.59.25
执行过程省略......
截屏2026-05-13 15.03.11

接着,进入 BIOS 关闭 Secure Boot,启动工作站,让 AI 重新执行安装程序。
截屏2026-05-13 15.05.10
过程省略......
image

最后,让它生成部署文档
截屏2026-05-13 15.07.34

NVIDIA Container Toolkit

可以选择使用已有的文档让 AI 根据实际情况执行、修正并生成 Skill,也可以什么都不约束,直接让 AI 自行安装,最后生成部署文档。以此类推,其他服务也可以如此。

例4 MySQl 数据恢复

背景:开发过程中,删除了几十条 MySQL 表中的数据,想要把这几十条数据恢复回来。

解决方法:查找到最新的二进制文件,然后下载到本地电脑,将数据给 AI 。AI 自行下载 MySQL 官方的查看二进制文件的客户端工具,找到 DELETE 删除记录。把表结构提供给 AI ,AI 就可以反向生成 INSERT 语句

截屏2026-05-13 15.48.54

  • 期间 AI 会进行交互操作,确认一些问题点(一直以来,这一点最让我佩服。人总有考虑不周全的情况,描述不清楚的地方,而优秀的 AI 智能体仿佛有生命一样,它会产生疑问并向你确认)

截屏2026-05-13 15.54.14-redacted_dot_app-redacted_dot_app

  • 在我没有告知 AI 表名时,它依旧根据自己的分析,找到了目标表的名称。

接着进行了一些交互确认,并且提供了表结构给 AI

中间过程省略......

最后 AI 反向生成了 INSERT 语句到文件中。到数据库中执行即可。
截屏2026-05-13 16.05.11-redacted_dot_app

posted @ 2026-05-13 18:03  清葵雨露  阅读(96)  评论(0)    收藏  举报