开源项目LearnSSH让AI安全操作服务器
速览
LearnSSH是一个面向Codex的Agent Skill,允许AI助手在用户授权下安全地操作远程服务器,包括执行命令、上传下载文件、启动SSH隧道等。它通过一个Node.js CLI代理所有SSH连接,确保密码、私钥和passphrase始终不进入聊天记录,而是由用户在终端中隐式输入。该项目已开源,安装简单,支持密码、私钥和SSH agent等多种认证方式,并能拦截危险命令如rm -rf /。
AI 深度解读
背景
随着大型语言模型(LLM)驱动的编程助手(如 OpenAI Codex)能力不断增强,用户越来越希望让 AI 直接执行服务器管理任务,例如检查磁盘、运行命令或部署代码。然而,传统的做法面临显著的安全隐患:如果 Agent 直接拼装 ssh、scp 命令,就必须在对话中传递密码、私钥或 passphrase,这些敏感信息会暴露在聊天记录中,增加泄露风险。此外,Agent 缺乏对危险命令(如 rm -rf /)的感知,可能导致误操作。为了解决这一矛盾,社区推出了 LearnSSH——一个专门为 Codex 设计的 skill,旨在让 AI 安全地操作服务器,同时将密码、私钥、passphrase 完全隔离在聊天之外。
核心内容
LearnSSH 是一个开源项目,由两部分组成:
- Codex skill —— 一个提示词(instruction)集合,告诉 Agent 遇到与 SSH、服务器、上传、下载、隧道相关的任务时,应该使用 LearnSSH 提供的命令,而不是直接运行原生的
ssh/scp/sftp,也绝不能要求用户把密码、私钥或 passphrase 发送到聊天里。 - Node.js CLI 工具 —— 名为
learn-ssh的命令行程序,负责实际与服务器建立连接并执行操作。Agent 发出的命令格式为learn-ssh exec "服务器别名" -- "实际命令",例如learn-ssh exec "阿里云北京区服务器" -- "df -h"。这样 Agent 只操作别名和结果,不接触底层认证凭据。
LearnSSH 当前支持以下常用操作:
- 按服务器别名执行远程命令
- 上传文件
- 下载文件
- 启动本地 SSH 隧道
- 密码登录
- 私钥登录
- SSH agent 登录
- 跳板机(bastion/jump host)
- JSON 格式输出
- 复用 SSH 连接(connection multiplexing)
- 本地拦截
rm -rf /等根目录强删命令
Agent 能接触的信息:
- 服务器别名(例如
阿里云北京区服务器) - 非敏感元数据(描述信息、登录方式类型)
- 命令执行结果(stdout、stderr、exit code)
- 上传/下载是否成功
- 隧道是否启动成功
Agent 永远不会知道:
- SSH 密码
- 私钥内容
- 私钥 passphrase
- 加密后的 vault 内容
- 本地 master key
安装方式:在终端执行 npx --yes github:LearnAIHubC/LearnSSH。
典型使用流程(分三步):
第一步:初始化
learn-ssh init
第二步:添加服务器。根据认证方式选择不同命令。
-
密码登录:
learn-ssh add \ --alias "阿里云北京区服务器" \ --host 203.0.113.10 \ --user root \ --auth password执行后终端会隐藏输入密码,密码不会出现在历史或聊天中。
-
私钥登录(有 passphrase):
learn-ssh add \ --alias "阿里云北京区服务器" \ --host 203.0.113.10 \ --user root \ --auth key \ --key-path ~/.ssh/id_ed25519 \ --embed-key \ --ask-passphrase--embed-key将私钥加密保存到本地存储;--ask-passphrase会在终端提示输入。 -
私钥登录(无 passphrase):
learn-ssh add \ --alias "阿里云北京区服务器" \ --host 203.0.113.10 \ --user root \ --auth key \ --key-path ~/.ssh/id_ed25519 \ --embed-key -
SSH agent 登录:
learn-ssh add \ --alias "阿里云北京区服务器" \ --host 203.0.113.10 \ --user root \ --auth agent使用本机 SSH agent 进行认证,无需在 LearnSSH 中存储任何凭据。
第三步:重启 Codex,然后发送自然语言指令,例如:
帮我检查 阿里云北京区服务器 的系统版本、磁盘、内存和最近的错误日志
Codex 会调用 LearnSSH skill,通过别名执行命令并返回结果,全程不向用户索要密码或私钥。
项目地址位于 GitHub 上的 LearnAIHubC/LearnSSH。
关键要点
- 安全隔离:密码、私钥、passphrase 永远在终端本地输入,Agent 只操作服务器别名和命令结果,杜绝敏感信息进入对话。
- 双组件架构:Codex skill 承担指令调度,Node.js CLI 承担实际连接与执行,职责分离,降低了 Agent 误操作或泄露凭据的风险。
- 多认证方式支持:覆盖密码、私钥、SSH agent 三种主流方式,并支持跳板机,适应不同运维场景。
- 本地危险命令拦截:内置
rm -rf /等根目录强删命令的拦截,防止 Agent 误触导致灾难性后果。 - 连接复用:支持 SSH 连接复用,减少重复认证开销,提升批量命令执行效率。
- 安装简单:只需一条
npx命令即可运行,无需手动配置复杂的 skill 注册过程。 - Agent 无需了解底层细节:用户只关心服务器别名,Agent 自动通过
learn-ssh exec发起操作,对用户透明。 - 数据最小化暴露:Agent 仅接触别名、元数据和返回结果,不接触加密存储的 vault 内容或本地 master key,符合最小权限原则。
意义与影响
LearnSSH 填补了 LLM 编程助手在服务器管理领域的安全空白。它使得开发者和运维人员可以放心地让 AI 代劳日常巡检、文件传输、隧道建立等任务,而不必担心密码泄露或 Agent 误执行高危命令。这种设计模式(skill + CLI 本地代理)提供了一种可复用的思路:任何需要本地敏感凭据的操作,都可以通过类似的方式将安全边界划在 Agent 之外。对于社区而言,LearnSSH 不仅是工具,更是一个安全最佳实践的范例——它证明了在 AI 与基础设施之间建立可信的、受控的交互层是可行且必要的。未来,类似的 skill 可以扩展到数据库管理、容器操作、云 API 调用等领域,推动 AI 从“对话助手”真正走向“可信操作员”。
