爱意满满的作品展示区。
Cola90

让本地 Agent 接管远程 Linux :别让模型套 SSH(daimon-mcp)

  •  
  •   Cola90 · 5h 48m ago · 456 views

    让本地 Agent 接管 VPS:别让模型套 SSH ( processd-mcp 、daimon-mcp )

    买了台 Debian 小鸡,想让 Claude Code / Codex 直接把 Docker 、nginx 配好。 最省事的想法是:本地 Agent 每条命令前面套一层 ssh user@vps "..."。 跑了两天,发现不是「偶尔转义错」,是这条路会系统性把模型用废。

    让模型套 SSH ,有两件结构性的事

    1. 二次编码,命令更容易写错

    Agent 真正想执行的是这一条:

    grep -E "error|fail" /var/log/nginx/error.log | tail -20
    

    套上 SSH 之后,它得生成类似:

    ssh -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=no -p 22 [email protected] \
      "grep -E \"error|fail\" /var/log/nginx/error.log | tail -20"
    

    这里发生了两次编码:

    • 本地 shell 先解析整行 ssh ... "inner"
    • 远端 shell 再解析 inner

    引号、管道、$VAR`、反引号、换行,每一层都要逃一次。`$OLD 这种在本地就被展开了,根本到不了远端;复杂一点的 sed、heredoc 、json 片段,错位一次整条废。 模型训练时见过的是「干净命令」,不是「 SSH 包装后的二次转义」。它会把意图写对,再在包装层写错。

    2. Bash 会话不保持,同样的活要多绕几轮

    SSH 默认是无状态的:这次 cd /workspace && source .venv/bin/activate,下一次 tool call 又是全新 shell ,$PWD 回到 home ,venv 、export 、后台进程全没了。

    于是模型被迫每一步都把状态塞回命令里,或者先 pwd、再 cd、再确认 venv 、再跑真正要做的那步。你在看的「 Agent 在干活」,有很大一部分是在恢复上一跳丢掉的环境。

    ControlMaster 只能复用 TCP ,救不了远程 shell 的 cwd 和环境变量——模型每次生成的仍是一条独立的 ssh ... "cmd"

    这两件事叠在一起

    1. 二次编码影响模型的命令准确性。 失败经常不是「它不知道该装 Docker 」,而是包装层把引号、变量、管道编坏了。排错也更难:你看到的报错混着 SSH 参数、本地展开和远端执行,模型自己也不知道是哪一层炸的,容易改错地方。
    2. Bash 不保持,模型需要更多轮 loop 才能完成相同操作。 本来 3 步能做完的( cd 、改配置、重启),变成 8 步:确认目录、再 cd 、确认环境、再执行、失败、检查是不是没 cd 、再来一次。token 和时间都耗在状态对齐上,不是耗在任务本身。

    所以问题不是「模型不够聪明」,是运输层在跟它作对。

    我做了什么

    VPS 上只跑一个静态 musl 的 processd-mcp(对外也叫 daimon-mcp ),暴露的工具和 Claude Code 内置的对齐:BashReadWriteEditGlobGrepWebFetch,外加 PTY 。

    本地 Agent 继续在你电脑上跑( Claude Code / Codex CLI / Codex 桌面 GUI / Cursor 都行)。远端不装模型、不装 Codex 。Agent 生成的就是那条干净命令,由 processd-mcp 在同一个 shell 会话里执行——cwd 、环境变量、后台任务会保持下去,没有 SSH 那层二次编码。

    生产走 Tailscale ,别 0.0.0.0:8080 裸奔。

    你怎么装

    Debian / Ubuntu + systemd ,SSH 上去一次:

    curl -fsSL https://github.com/daimon-hq/release/releases/latest/download/install-processd-kernel.sh | sudo bash -s -- install
    
    sudo systemctl status processd-mcp --no-pager
    curl -i http://127.0.0.1:8080/health        # 204
    sudo awk -F= '/^PROCESSD_TOKEN=/{print $2}' /etc/processd-mcp/processd-mcp.env
    

    默认绑 127.0.0.1,本地 Agent 连不上远程回环。改成 Tailscale IP 再重启:

    TS_IP=$(tailscale ip -4)
    sudo sed -i "s/^MCP_HOST=.*/MCP_HOST=${TS_IP}/" /etc/processd-mcp/processd-mcp.env
    sudo systemctl restart processd-mcp
    

    本地 .mcp.json

    {
      "mcpServers": {
        "daimon": {
          "type": "http",
          "url": "http://<Tailscale IP>:8080/mcp",
          "headers": {
            "X-Access-Token": "<PROCESSD_TOKEN>"
          }
        }
      }
    }
    

    然后直接说:「把这台机器装好 Docker ,起一个 nginx 监听 80 。」

    安装资产: https://github.com/daimon-hq/release 文档: https://daimon-hq.github.io/

    8 replies    2026-09-03 21:33:27 +08:00
    Maboroshii
        1
    Maboroshii  
       5h 46m ago
    我一般跟 agent 说:你用 tmux 开一个 session ,ssh 连接到机器 balabalabala
    laurent
        2
    laurent  
       3h 32m ago
    和楼上差不多,手动开 tmux ssh 连上服务器。然后告诉 agent 连上刚才 session 进行操作。如果命令要 sudo ,输完命令后,等待 30s ,我来手动输入。
    binhb
        3
    binhb  
       1h 56m ago via iPhone
    这个场景目前在使用 warp terminal 来解决
    phrack
        4
    phrack  
       1h 33m ago
    简单问题复杂化
    Cola90
        5
    Cola90  
    OP
       1h 29m ago
    @phrack 你猜生产沙箱要怎么做? ssh 吗?
    phrack
        6
    phrack  
       1h 11m ago
    你把 AI 带偏了

    AI 会顺着你的话说,它能力也强,你想要什么都能给你搞出来。一个领域你不熟悉,跟 AI 做东西出来就是这种奇怪的东西,有点像是以前说的,拿着 python 写 c 代码的样子,写出来能用,但是怎么看都不顺眼

    ---

    你这篇文章实在是太过 AI ,我就不引用了,AI 口水话看的多了都知道哪些是 AI 的口水,站长不让发 AI 内容的

    ---

    工具的话,如果只是一次性或者用个几次的,让它本地写好脚本,scp 上去执行就行了,哪里不对改脚本,不会涉及到编码的问题

    生产用的一般 ansible 配置,让 AI 写 ansible ,稳定容错高

    生产直接云上起 k8s cluster 也多了,没有配置 docker nginx 这些东西的过程了,都在 k8s 里,AI 写 k8s resource 也很强,让它写 resource yaml ,最多再加几个脚本弄个简单的 template

    你应该是没怎么接触过服务器管理,想当然的脑袋里面有个思路,反正 AI 什么都能做,做出来就是这个样子
    Cola90
        7
    Cola90  
    OP
       1h 3m ago
    @phrack 你应该是不是做 ai 行业的吧,你没明白我在说啥
    phrack
        8
    phrack  
       52 mins ago
    @Cola90 前面写那么长我也没明白你给我整个简单版的吧

    是要给 AI 一个交互式 shell 吗?但是这个只是手段,目的还是配置服务器?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3016 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 14:25 · PVG 22:25 · LAX 07:25 · JFK 10:25
    ♥ Do have faith in what you're doing.