← 返回信息流
Agent SkillLINUX DO · AI·2 小时前

开源项目LearnSSH让AI安全操作服务器

原标题:【开源skills】让 Codex 可以帮你操作服务器

速览

LearnSSH是一个面向Codex的Agent Skill,允许AI助手在用户授权下安全地操作远程服务器,包括执行命令、上传下载文件、启动SSH隧道等。它通过一个Node.js CLI代理所有SSH连接,确保密码、私钥和passphrase始终不进入聊天记录,而是由用户在终端中隐式输入。该项目已开源,安装简单,支持密码、私钥和SSH agent等多种认证方式,并能拦截危险命令如rm -rf /。

AI 深度解读

背景

随着大型语言模型(LLM)驱动的编程助手(如 OpenAI Codex)能力不断增强,用户越来越希望让 AI 直接执行服务器管理任务,例如检查磁盘、运行命令或部署代码。然而,传统的做法面临显著的安全隐患:如果 Agent 直接拼装 sshscp 命令,就必须在对话中传递密码、私钥或 passphrase,这些敏感信息会暴露在聊天记录中,增加泄露风险。此外,Agent 缺乏对危险命令(如 rm -rf /)的感知,可能导致误操作。为了解决这一矛盾,社区推出了 LearnSSH——一个专门为 Codex 设计的 skill,旨在让 AI 安全地操作服务器,同时将密码、私钥、passphrase 完全隔离在聊天之外。

核心内容

LearnSSH 是一个开源项目,由两部分组成:

  1. Codex skill —— 一个提示词(instruction)集合,告诉 Agent 遇到与 SSH、服务器、上传、下载、隧道相关的任务时,应该使用 LearnSSH 提供的命令,而不是直接运行原生的 ssh/scp/sftp,也绝不能要求用户把密码、私钥或 passphrase 发送到聊天里。
  2. 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 从“对话助手”真正走向“可信操作员”。

查看原文 →linux.do