本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容:
- 我的帖子已经打上 开源推广 标签: 是
- 我的开源项目完整开源,无未开源部分: 是
- 我的开源项目已链接认可 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 正常只会接触这些信息:
- 服务器别名,例如
阿里云北京区服务器
- 非敏感元数据,例如描述信息、登录方式类型
- 命令执行结果,例如
stdout、stderr、exit 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。
项目地址: