在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

最近在完善自研 CLI 工具的 /server add 模块,把原本单一路径的 “快乐流程”,扩展成了覆盖密码登录、密钥登录、跳板机、密钥托管、公钥自动注入等真实场景的 SSH 连通性冒烟测试。整个开发过程我全程借助 AI 辅助,从问题定位、逻辑梳理、方案取舍到代码优化,AI 全程参与。

很多人对 AI 编程有个误解:把需求丢给 AI,坐等代码复制粘贴运行。但真正落地到生产级逻辑时,我越发清晰地感受到:AI 是顶级效率放大器,但绝不是开发者的替代品

这篇文章就以我和 AI 对话的真实案例,精简提炼核心逻辑,告诉你:为什么用 AI 编程,反而更需要扎实的基础知识。


一、背景:我在做什么

正在开发CLI程序里有个内置命令:

/server add

作用:添加一台远程服务器,做 SSH 连通性验证,并把关键信息(认证方式、密钥、Host Key 指纹)持久化存储,后续用于批量运维、信息采集、自动防御等。

为了覆盖真实场景,我扩展了以下冒烟路径:

  • 密码认证 + 临时密码录入

  • 密码认证 + 复用托管密钥

  • 用户拒绝 Host Key 时的取消流程

  • 密钥认证 + 引导式公钥注入

  • 密钥认证 + 复用托管密钥

  • 基于跳板机的服务器添加

冒烟全部跑通,但在其中一条关键路径上,出现了一个平台相关、偶现、难复现的小问题:
使用已托管密钥直接连接服务器时,首次连接成功,但 host_key_fingerprint 没有被持久化。

于是,我开始和 AI 定位根因。


二、AI 给出的初步分析(精简版)

  1. 当前逻辑只在连接失败 + 可信任 Host Key 的分支里,才会保存指纹。

  2. 密码登录在 Windows 上用 plink,首次连接会输出指纹,能被解析并保存。

  3. 密钥登录在 Windows 上用 ssh\.exe,连接成功时不会输出指纹,所以拿不到。

  4. 这和 Docker 重跑无关,只是 Docker 会让 Host Key 频繁变化,更容易暴露问题。

乍一看非常合理,逻辑链完整,甚至连代码行号都精准定位。

但我立刻判断:这个解释不完整,甚至没触达真正根因。


三、我的判断:问题不在工具,在环境

我直接抛出观点:

指纹没有持久化,大概率不是因为 ssh\.exe 不输出,而是因为:
本地 known\_hosts 已经信任过这台服务器,SSH 不再走首次确认流程,所以静默通过。

AI 在几秒内就修正了结论:

  • 你说得对。如果本机已经信任该 Host Key,SSH 不会提示、不会输出指纹。

  • 当前逻辑依赖 “首次连接提示” 来捕获指纹,一旦环境不是 “首次”,就会丢失。

  • 所以表现不稳定:时而能存,时而不能存。

这一步,就是基础知识发挥作用的时刻:

  • 懂 SSH Host Key 机制

  • known\_hosts 作用

  • 懂客户端首次连接与非首次连接的行为差异

没有这些,AI 说什么,你就只能信什么。


四、继续深入:我们该怎么修复?

我继续提出方案:

既然连接已经成功,说明密钥是通的。那我们主动探测一次 Host Key 指纹,然后保存,不就统一了?

AI 表示赞同,但我继续追问:

主动探测前,要不要先删掉本地 known\_hosts,强迫 SSH 重新输出指纹?这样最稳妥。

AI 立刻提醒风险:

  • 不建议删用户 known\_hosts,会破坏系统已有信任关系。

  • 应该使用独立探测逻辑(ssh\-keyscan 一类),不依赖连接流程,不污染用户环境。

我接受了这个建议,并最终确定方案:

  1. 不删、不改、不碰用户本机 known_hosts

  2. /server add 连通成功后

  3. 如果 host\_key\_fingerprint 为空

  4. 主动触发一次独立探测

  5. 探测成功则保存,不成功则留空,不影响主流程

  6. 让逻辑不再依赖认证方式、客户端工具、环境历史

五、整个过程带给我的思考

把这段对话浓缩成三句话:

  1. AI 能快速给出表面原因,但不一定能抓到真实根因。

  2. AI 能生成代码,但不能帮你判断风险、取舍方案。因为往往方案的决策取决于你的实际使用场景,你的团队情况,客户情况,运行环境等各个方面,AI没有办法直接帮你定稿,他会根据足够的信息给你相对合理的方案,最终决定还是要你拍板

  3. AI 越强大,越需要开发者有扎实的基础知识来 “校准” 结果。

很多人觉得 AI 来了,前端不用懂原理、后端不用懂网络、运维不用懂系统。
但真实情况是:

  • 你不懂 SSH,你就不知道 Host Key 为什么会丢。

  • 你不懂客户端行为,你就不知道为什么有时存有时不存。

  • 你不懂安全边界,你就可能写出删 known\_hosts 这种破坏性逻辑。

AI 可以写代码,但不能替你理解系统;AI 能补全逻辑,但不能替你判断对错。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐