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

猫猫猫 2026-07-04 19:57 1

本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容:



  • 我的帖子已经打上 开源推广 标签:

  • 我的开源项目完整开源,无未开源部分:

  • 我的开源项目已链接认可 LINUX DO 社区:

  • 我帖子内的项目介绍,AI生成、润色内容部分已截图发出:

  • 以上选择我承诺是永久有效的,接受社区和佬友监督:


以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出




最近做了一个 Codex skill,叫 LearnSSH


它的目标很简单:


让 Codex 可以帮你操作服务器,但不要让密码、私钥、passphrase 出现在聊天里。


LearnSSH 能做什么


当前 LearnSSH 支持这些常用操作:



  • 按服务器别名执行远程命令

  • 上传文件

  • 下载文件

  • 启动本地 SSH 隧道

  • 支持密码登录

  • 支持私钥登录

  • 支持 SSH agent

  • 支持跳板机

  • 支持 JSON 输出

  • 支持复用 SSH 连接

  • 本地拦截 rm -rf / 这类根目录强删命令


它是怎么设计的


LearnSSH 主要由两部分组成:



  • 一个 Codex skill

  • 一个 Node.js CLI


Codex skill 负责告诉 Agent:



  • 遇到 SSH、服务器、上传、下载、隧道这些任务时,使用 LearnSSH

  • 不要直接运行原生 ssh / scp / sftp

  • 不要要求用户把密码、私钥、passphrase 发到聊天里

  • 后续所有服务器操作都通过别名完成


Node.js CLI 负责真正连接服务器。


也就是说,Agent 发起的是这种命令:


learn-ssh exec "阿里云北京区服务器" -- "df -h"

而不是让 Agent 直接拿着密码去拼 SSH 命令。


Agent 会拿到什么内容


Agent 正常只会接触这些信息:



  • 服务器别名,例如 阿里云北京区服务器

  • 非敏感元数据,例如描述信息、登录方式类型

  • 命令执行结果,例如 stdoutstderrexit code

  • 上传下载是否成功

  • 隧道是否启动成功


Agent 不需要知道:



  • SSH 密码

  • 私钥内容

  • 私钥 passphrase

  • 加密后的 vault 内容

  • 本地 master key


安装方式


运行:


npx --yes github:LearnAIHubC/LearnSSH

一个典型使用流程


终端操作:


第一步,初始化:


learn-ssh init

第二步,添加服务器。


这里的 --auth 表示服务器的登录方式,目前常用有三种:



  • password:密码登录

  • key:私钥登录

  • agent:使用本机 SSH agent 登录


如果你的服务器是密码登录,可以这样添加:


learn-ssh add \
--alias "阿里云北京区服务器" \
--host 203.0.113.10 \
--user root \
--auth password

注意,--auth password 只是表示“使用密码登录方式”,不是让你把密码写在命令里。


执行这条命令后,LearnSSH 会在终端里提示你输入 SSH 密码。密码是在终端隐藏输入的,不会显示出来,也不会进入 Codex 聊天内容。


如果你的服务器是私钥登录,可以这样添加:


learn-ssh add \
--alias "阿里云北京区服务器" \
--host 203.0.113.10 \
--user root \
--auth key \
--key-path ~/.ssh/id_ed25519 \
--embed-key \
--ask-passphrase

这里几个参数的含义是:



  • --auth key:表示使用私钥登录

  • --key-path ~/.ssh/id_ed25519:指定你的 SSH 私钥路径

  • --embed-key:把私钥内容加密保存到 LearnSSH 的本地存储里

  • --ask-passphrase:如果你的私钥有 passphrase,会在终端里提示你输入


如果你的私钥没有 passphrase,可以不加 --ask-passphrase


learn-ssh add \
--alias "阿里云北京区服务器" \
--host 203.0.113.10 \
--user root \
--auth key \
--key-path ~/.ssh/id_ed25519 \
--embed-key

如果你已经在本机配置好了 SSH agent,也可以使用 agent 模式:


learn-ssh add \
--alias "阿里云北京区服务器" \
--host 203.0.113.10 \
--user root \
--auth agent

这种方式下,LearnSSH 会通过本机 SSH agent 进行认证,不需要在 LearnSSH 里录入密码或私钥。


第三步,重启 Codex,并发送:


帮我检查 阿里云北京区服务器 的系统版本、磁盘、内存和最近的错误日志

之后 Codex 就会通过服务器别名操作,而不是向你索要 SSH 密码、私钥或 passphrase。


项目地址:


最新回复 (8)
  • swimking 07-04 20:33
    1

    我都是把地址和密钥文件地址给大模型,让他自己去ssh执行,感觉没什么区别

  • 猫猫猫 楼主 07-04 20:48
    2

    主要是为了方便使用,配置好别名,以后就不用配置了

    如果是密码的话,直接给LLM不一定不会泄露,虽然风险小但是没必要。

  • Hse7enD 07-04 21:16
    3

    很早就让 Codex 使用我环境变量的别名:sshServer 连接服务器操作做事情啦,都不需要单独搞个 skill。 ^-^

  • 猫猫猫 楼主 07-04 21:21
    4

    只是觉得skill 更直觉,只要输入说 xx服务器 帮我查个xxx 就可以了

    他自己会去拿skill的信息,环境变量的话有时间我也研究一下 ^-^

  • Hse7enD 07-04 21:23
    5

    嗯嗯,大家按自己的习惯和使用方式就行。不局限一种。你提供的也挺好的 ^-^

  • fan 07-04 21:28
    6

    用得上,先支持下大佬再说,收藏了

  • Iberxilong 07-13 23:22
    7



    npx --yes github:LearnAIHubC/LearnSSH

    Installing LearnSSH Node dependencies…

    LearnSSH install failed: spawnSync npm.cmd EINVAL


    运行这个命令,报错问的AI,AI说是 ^-^

  • 猫猫猫 楼主 07-13 23:38
    8

    win嘛?我明天看看把BUG修一下。

* 帖子来源Linux.do
返回