
1. 写在前面为什么需要多机调度我最近在折腾一套全新的开发工作流核心需求一句话就能说清楚让写代码的AI工具在远程主机上跑起来然后我在本地机器上像指挥中心一样统一调度按任务分发给不同机器执行。这套方案的三个关键词——Hermes Agent、SSH、Claude Code——组合到一起解决的是真实到不能再真实的痛点AI编程工具越用越顺手但它被绑死在一台机器上。你不可能要求办公室的Windows工作站和家里的Linux服务器装一套完全一样的环境更不可能每次都开着远程桌面去点鼠标。更难受的是当你同时要处理前端、后端、运维脚本、文档生成这些跨类型任务时单机串行执行效率实在拉胯。我实测的最终方案是本地Windows作为控制端通过SSH密钥连到两台Linux主机其中一台专门跑Claude Code负责代码生成和修改另一台用Hermes Agent做任务编排和命令分发把整个开发过程拆成多个子任务按机器负载和工具擅长度合理分配。实际跑下来一次涉及三个模块的跨平台编译任务从手动切换机器操作大约需要二十分钟变成了一条命令五点七秒完成分发调度。如果你是以下几类人这篇内容对你应该很有用手里有超过一台开发机的程序员想把Claude Code用到远程环境里的AI工具使用者或者对自动化编排感兴趣、想搭一套类似“任务中控台”的爱好者。我会把整套方案的架构思路、密钥配置、工具安装、实际操作步骤、踩坑记录全部摊开来讲确保你照着做就能跑通。2. 方案选型思路为什么要用 Hermes Agent SSH Claude Code2.1 单机开发的天花板在哪里先说一个基本事实Claude Code 这类终端导向的AI编程工具本质上是一个在本地终端里跑起来的Agent它能读懂你的代码仓库调用工具执行命令、修改文件、运行测试。它非常强大但它的工作环境默认就被限制在当前机器上。这就带来三个很现实的问题。第一仓库在远程代码跑不起来。你的开发机是Windows但线上是Linux依赖、路径、编译参数都可能不一样。你让Claude Code改了代码本地跑不了也不知道改没改对。第二多机器协作时上下文不连续。你在办公室电脑上让Claude Code修了一个bug回家想接着改另一个对不起两台机器的会话历史不互通。你得手动导来导去。第三AI任务之间的编排是空白。Claude Code擅长写代码但如果同时要把代码推上Git、执行远程测试、收集日志、生成报告它单兵作战就得靠一堆外部SHELL脚本强凑维护成本直线上升。2.2 Hermes Agent 在体系里承担什么角色Hermes Agent 是一个面向终端环境的智能代理工具它做的核心事情是理解你的自然语言指令将其拆解为可执行的命令序列并在目标机器上执行。它可以被理解为调度大脑——我自己打的比方是Claude Code像一位码农Hermes Agent 像他的项目经理。项目经理不写代码但它知道谁该干什么、什么时候干、下一步该调用哪个环节的资源。Hermes Agent 负责接收任务描述分析需要执行的动作通过SSH通道把任务发给指定机器再拉回执行结果。这套组合的实际收益非常明显任务分发变成本地的一条指令不用手动开多个终端窗口反复切换。多台机器之间的SSH通道复用同一个密钥对配置一次到处执行。Claude Code 专注于它最擅长的代码理解与修改而环境操作、文件传输、命令调度这些杂活全部由Hermes Agent 接管。2.3 为什么仍然需要SSH而不是更复杂的方案有人可能会问既然要协调多台机器为什么不用Ansible、SaltStack、Kubernetes这些更重型的东西我的回答是杀鸡不需要牛刀。Ansible在设计上是给基础设施配置管理用的它的Playbook有严格的语法学习曲线陡峭而且对AI工具的支持并不友好。Kubernetes用来调度容器但是我们这里是调度真实的开发环境和AI进程不是在管一组无状态Pod。SSH的好处在于——它简单、通用、安全Puppet和Ansible底层实际上也是基于SSH通道来工作的。我们要构建的是一个开发辅助编排层而不是一套全自动运维系统SSH加上Hermes Agent 的智能分发能力已经绰绰有余。2.4 需要提前准备的环境清单按照我实际的部署经验你至少需要准备以下环境清单如下角色操作系统建议配置安装的软件控制端Windows 10/11 或 mac OS8G内存起步Hermes Agent、Claude Code、Git、OpenSSH客户端执行端1Ubuntu 22.04 LTS16G内存、独立GPU可选Claude Code、Node.js 20、OpenSSH服务端执行端2任意Linux发行版4G内存即可Hermes Agent、Node.jsWindows控制端是主战场因为大多数时候你人在Windows前面调度指令从这台机器发出。执行端建议至少准备一台性能较好的Linux机器因为Claude Code在生成和修改大型项目时内存和CPU占用都不小。如果你的执行端只有Windows也不用担心Windows 10/11自带的OpenSSH服务端和Bitvise SSH Server都是可用的方案后文会在密钥配置和问题排查部分专门讲怎么处理Windows执行端的坑。3. 核心前置工作SSH密钥配置与多机互信3.1 一次性生成密钥打通控制端与执行端SSH免密登录是整个编排体系的地基。这一步没做通后续一切自动化都是空谈。我用的是最经典的RSA密钥对方案如果你对安全性有更高要求也可以使用ed25519算法生成方式完全一样。在控制端Windows上打开一个PowerShell窗口输入ssh-keygen -t rsa -b 4096 -C hermes-multi-machine参数说明-t rsa指定算法-b 4096指定密钥长度-C是添加注释方便你日后识别这是哪台机器的密钥。执行后一路回车默认会写入C:\Users\你的用户名\.ssh\id_rsa其中id_rsa是私钥id_rsa.pub是公钥。公钥是要分发到各台执行机的私钥留在控制端绝不能外泄这个习惯必须刻在脑子里。3.2 关联任务把公钥批量部署到执行端3.2.1 通用方法ssh-copy-id在Linux控制端或Windows Git Bash环境下有一个非常好用的命令ssh-copy-id可以直接把公钥追加到目标机器的authorized_keys文件中ssh-copy-id -i ~/.ssh/id_rsa.pub user192.168.1.101这条命令首次执行会提示你输入目标机器的密码之后就不再需要了。它会自动创建.ssh目录、设置正确的权限、把公钥内容追加进去省去手动操作出错的可能。3.2.2 Windows环境下的手动部署如果你没有Git Bash也可以手动完成。步骤很简单先把id_rsa.pub的内容复制一份然后SSH登录到目标Linux机器执行mkdir -p ~/.ssh chmod 700 ~/.ssh echo 粘贴你的公钥内容 ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys注意chmod权限那一步非常关键。我见过不少人密钥文件内容完全正确但就是登录不上十有八九是authorized_keys或.ssh目录的权限过宽。SSH服务端校验很严格authorized_keys必须是600.ssh目录必须是700去掉了任何组权限和其他用户的读权限才能通过验证。3.3 验证多机互信是否打通配置完成后别急着往下走先做一轮连通性验证。在控制端依次执行ssh user192.168.1.101 echo connected to node1 ssh user192.168.1.102 echo connected to node2如果两行都能看到connected to nodeX的输出说明密钥配置成功。如果提示需要输密码回去检查密钥内容和权限设置。3.4 设置SSH专属配置项简化连接参数多机环境下每次敲一长串user192.168.1.101也很烦。我通常会在控制端的~/.ssh/config文件里维护一组主机别名格式很简单Host node1 HostName 192.168.1.101 User ubuntu IdentityFile ~/.ssh/id_rsa Host node2 HostName 192.168.1.102 User root IdentityFile ~/.ssh/id_rsa配置好之后ssh node1就能直接连上对应机器不用再记IP和用户名。这个配置文件同样适用于scp、sftp也是后续Hermes Agent 调用SSH执行命令时依赖的底层连接基础。4. Hermes Agent 安装与基础配置4.1 安装前要确认的依赖项Hermes Agent 基于Node.js技术栈开发所以第一件事是确保控制端安装好Node.js运行时版本尽量在18以上。推荐直接使用LTS版本后续兼容性问题少很多。在Windows控制端或任一需要安装Hermes Agent的节点执行npm install -g hermes-agent/core如果你的网络环境访问npm官方源不稳定建议顺手切换成国内镜像源再装实测速度提升明显npm config set registry https://registry.npmmirror.com4.2 初始化与登录验证安装完成后在任意目录运行hermes init这一步会生成一个默认的配置文件通常存放在~/.hermes/config.yaml。首次运行可能提示你登录网站验证身份这是Hermes Agent的账号激活流程按提示打开浏览器完成绑定即可。我实际操作中遇到的一个小坑是Windows控制台如果有代理设置可能会导致登录验证的网页打不开。解决办法是把终端里的代理变量临时清掉等激活成功后再恢复。4.3 编辑核心配置让Agent知道去哪台机器干活打开~/.hermes/config.yaml你会看到一个类似下面的结构我贴上我的核心配置并标注每项含义# Hermes Agent 核心配置示例 agent: name: my-dev-orchestrator model: provider: anthropic api_key: sk-ant-*** # 你的Claude API密钥或第三方兼容接口密钥 model_name: claude-sonnet-4-20250514 context: max_tokens: 32000 # 单次任务允许的上下文长度 ssh: default_timeout: 30 # SSH连接超时时间单位秒 connections: - name: node1 host: 192.168.1.101 username: ubuntu key_path: ~/.ssh/id_rsa - name: node2 host: 192.168.1.102 username: root key_path: ~/.ssh/id_rsassh.connections这一段是核心它声明了Hermes Agent 可以调度的所有远程节点。每一项都对应前面配置过SSH密钥的机器Agent 在执行任务时会根据任务描述自动选择合适的节点。4.4 验证Agent是否正常工作配置完成后运行一个最简单的中文指令测试hermes run 查看node1的系统信息和当前目录如果Hermes Agent 正确识别出需要使用node1并通过SSH执行了uname -a和pwd最后把结果汇总返回说明整套调度链路是通的。这一步成功相当于第一块多米诺骨牌倒了后面的事情都顺利得多。5. Claude Code 安装与跨平台适配5.1 执行端的Claude Code安装Claude Code官方安装方式同样基于Node.js。在需要执行代码生成任务的Linux机器上执行npm install -g anthropic-ai/claude-code安装完成后初始化登录claude首次运行会要求你完成认证通常是打开生成的链接登录Anthropic账号或者填入API Key。认证通过后Claude Code会在当前用户目录生成独立的会话和配置目录。5.2 Windows端的快速配置一个容易忽略的问题在Windows控制端同样可以安装Claude Code但注意一个关键差异Windows终端默认使用的是CMD或PowerShellClaude Code的某些交互逻辑在PowerShell里工作不太正常。建议在Windows端统一使用Windows Terminal配合PowerShell 7或者干脆用Git Bash跑实测稳定性好很多。另外Claude Code 会读取仓库目录下的一些配置文件比如.claude/commands/*.md这些文件在跨平台复用时要特别注意换行符。Windows的CRLF换行符可能导致Linux端解析命令出错最简单的办法是在Git配置里统一设置git config --global core.autocrlf input5.3 多节点间共享配置的策略Claude Code在同一俄平台上的配置可以复制但最好不要直接复制整个用户目录。我更推荐的做法是配置好一台基准机器后把关键配置纳入Git仓库管理比如.claude/settings.json和.claude/commands目录然后在其他机器上通过git clone同步。这样做的好处是你新增一段常用Prompt模板或调整模型参数时只需要提交一次所有节点拉取即可生效。避免了逐台机器手动同步的重复劳动。5.4 在VSCode中整合Claude Code远程开发很多读者喜欢在VSCode里使用Claude Code插件边看代码编辑器和AI交互窗口并行工作。这个习惯不用改而且可以通过VSCode的Remote-SSH插件天然打通本地VSCode连接远程节点然后在该远程环境的终端里启动Claude Code你获得的是“远程机器上的AI编码助手 本地编辑体验”的组合。实际操作路径VSCode安装Remote-SSH扩展按F1输入Remote-SSH: Connect to Host选择node1VSCode会打开一个远程窗口这时按Ctrl打开终端输入claude即可完美运行。6. 多机编排实操调度Claude Code完成跨平台任务6.1 设计一个真实的任务场景理论说了一堆下面拿一个我实际跑过的完整任务来演示整个编排过程。任务目标在一台Linux服务器node1上创建一个Python爬虫项目抓取某个公开网站的标题列表把结果写到results.json然后通过Hermes Agent 把生成的文件回传到控制端Windows再由控制端完成一次格式化预览。这个任务横跨三台机器控制端、node1执行端、文本处理环节里面包含代码生成、命令行执行、文件传输、本地处理四种不同类型的工作非常适合展示Hermes Agent 的编排能力。6.2 用自然语言下达编排指令在控制端执行hermes run 在node1上创建一个Python爬虫项目使用requests和BeautifulSoup抓取https://example.com的标题保存到results.json然后把结果文件拉回本地这条指令包含了三个关键信息目标节点node1、执行动作创建项目、写爬虫、运行、结果处理回传本地。Hermes Agent 接收到指令后会做以下事情解析出目标节点node1选择SSH连接通道。在node1上拼装并执行一组命令创建项目目录、安装依赖库、生成爬虫代码。在node1上执行python3 crawler.py确认results.json生成。通过scp或sftp命令把results.json传回控制端指定目录。6.3 有一个关键细节Claude Code是被Hermes Agent “请”出来的这里要特别说明Hermes Agent 和Claude Code的协作方式。Hermes Agent 并不会直接调用Claude Code的API去写代码而是在远程节点上启动Claude Code的终端模式把写代码的任务交给它。简单说Hermes Agent 生成的远程命令类似cd /home/ubuntu/crawler-project claude -p 请创建一个爬虫脚本... --output-format text其中-p参数代表非交互式模式print模式它让Claude Code直接处理完任务后输出结果并退出而不是打开交互式对话界面。这是实现自动化的关键开关我去翻了很多资料发现不少人卡在这里——以为Claude Code只能手动对话使用不知道还有这种批处理模式。6.4 编排粒度与任务拆分的实战体会初用Hermes Agent 编排多机任务时最容易犯的错是把复杂任务一把扔给它。比如“帮我部署一个网站”这听起来很简洁但实际执行时Agent要拆解出几十个操作步骤任何一步出现歧义或环境差异执行就中断了。我的经验是手工把任务拆成三个阶段——准备阶段、执行阶段、收尾阶段。准备阶段包括环境检查和依赖安装执行阶段是核心代码生成和运行收尾阶段是文件回传和报告生成。每一步用一句明确的自然语言指令尽量不要跨阶段写进同一条指令里。切分后的指令条目如下hermes run 在node1上检查是否有python3和pip如果没有就安装 hermes run 在node1上创建目录crawler-project用Claude Code生成爬虫并运行 hermes run 把node1上的crawler-project/results.json回传到本地D:/results/三条指令串行执行每一条的结果都可验证出了问题能快速定位在哪一步。全局任务编排可以写成Shell脚本循环调用或者用Hermes Agent自己的任务链功能串起来。6.5 查看执行日志确认各节点负载编排系统最怕黑盒运行。Hermes Agent 默认会在~/.hermes/logs/下记录每个任务的详细日志包括SSH连接时长、命令执行耗时、返回结果摘要。我习惯在跑完一批任务后快速扫一眼时间线确认有没有节点在空转或超时。7. 常见问题与排查技巧实录7.1 SSH连接相关高频问题问题一ssh: connect to host github.com port 22: Connection refused这个问题表面上和github相关实际上根因多半不在github而是你的网络环境屏蔽了22端口。常见场景包括公司防火墙限制、部分云服务器的安全组规则、路由器策略。排查方法是先换443端口试试ssh -T -p 443 gitssh.github.com如果443端口能通就在~/.ssh/config里为github单独加一段配置Host github.com HostName ssh.github.com Port 443 User git这个方法在我的多台机器间同步配置时救了不少次。问题二SSH连接Windows服务器时报authentication failedWindows执行端配置OpenSSH Server是出了名的容易踩坑。一个非常隐蔽的原因是Windows的OpenSSH服务默认只允许Administrators组和Users组通过密码登录但不允许密钥登录。你需要以管理员身份运行PowerShell并编辑C:\ProgramData\ssh\sshd_config文件确认以下几行没有被注释PubkeyAuthentication yes PasswordAuthentication yes修改完后重启服务Restart-Service sshd如果还是失败再去事件查看器 - Windows日志 - OpenSSH/Operational里面看详细报错。这是官方日志信息量很大比盲猜配置强得多。问题三SSH命令行连接超时部署在欧拉或其他国产Linux发行版上的机器可能默认没有安装SSH服务端。解决办法是在目标机器上手动安装并启动服务。以OpenSSH为例标准安装命令是sudo yum install -y openssh-server sudo systemctl enable sshd sudo systemctl start sshd服务启动后检查监听端口ss -tlnp | grep 22如果输出里没有sshd进程监听22端口多半是SELinux策略或防火墙拦截可以临时放行测试sudo firewall-cmd --permanent --add-servicessh sudo firewall-cmd --reload7.2 Hermes Agent 使用中的典型问题问题四安装后运行hermes命令提示找不到这是Node.js全局安装路径没有加入系统PATH导致的。Windows环境下检查npm prefix -g输出的路径然后把对应的node_modules/.bin目录加入环境变量。很多情况下重启一个终端窗口就能解决因为环境变量是在窗口创建时读取的。问题五hermes run执行到一半卡住Hermes Agent 执行远程命令时如果目标机器上出现了交互式提示比如y/n确认、密码输入、或者长时间运行的进程Agent会一直等待直到超时。建议在配置里把default_timeout设大一些比如300秒同时在远程命令末尾加上 /dev/null避免标准输入阻塞导致Agent挂起。问题六Claude Code订阅被组织禁用执行claude时如果看到类似your organization has disabled claude subscription access for claude code的提示说明当前登录的Anthropic账号是组织管理员账号且组织策略禁止了Claude Code的使用。解决办法是换用自己的个人账号登录或者在组织设置里允许Claude Code访问。7.3 跨平台开发中的环境差异问题问题七路径和换行符混乱Windows和Linux的路径分隔符和换行符差异会在远程执行代码时引起各种莫名报错。最典型的是Python脚本在Windows上编写、Linux上运行时出现SyntaxError原因是CRLF换行符导致的。统一策略有两个设置Git的core.autocrlf为input提交时转为LF拉取时保持LF开发编辑器设置files.eol为\n。代码仓库内禁止混用换行符是跨平台开发的黄金法则。还有一个路径坑需要注意如果控制端是Windows远程任务里写本地路径时不要在Shell命令里直接用反斜杠\尽量使用/否则很容易在SSH传输时被转义解析错误。7.4 问题速查表问题现象可能原因解决方案SSH连远程22端口拒连防火墙/安全组改端口443或放行22端口密钥登录仍要密码权限过宽或公钥未追加设置.ssh 700、authorized_keys 600Windows SSH认证失败sshd_config未启用PubkeyAuthentication管理员修改并重启sshd服务hermes命令不存在Node.js全局路径未加入PATH添加npm prefix路径到环境变量远程命令卡住交互式提示阻塞输入命令加 /dev/null调大timeoutClaude Code报组织禁用组织策略限制换个人账号登录或修改组织策略远程执行后文件换行报错CRLF/LF混用Git设置core.autocrlf inputLinux节点无sshd进程未安装SSH服务端安装openssh-server并启动服务华为交换机等设备连不上设备未开启SSH服务设备配置vty和authentication8. 编排能力再扩展一些进阶玩法这套体系跑通以后能力边界完全取决于你的想象力。简单列举几个我在实际工作中扩展的场景给读者做个参考。第一把Hermes Agent作为定时任务调度器。在多台机器上编写不同的Claude Code任务模块然后通过系统crontab或Windows计划任务定时触发hermes run实现每天自动刷新某类数据、生成日报、同步仓库等功能。整个链条完全是无人值守的。第二在移动设备上远程发起任务。Android平板或手机上装一个支持SSH的终端比如Termius就可以SSH到控制端再通过Hermes Agent下发任务。因为这个编排体系唯一的入口就是一条SSH命令不需要额外开发App。第三任务结果统一收集到消息通知渠道。Hermes Agent 执行完毕后可以通过添加Webhook或调用系统命令的方式把任务结果推送到你的微信群机器人、钉钉群或者Telegram Bot随时随地掌握任务状态。这些扩展场景需要的不是新工具而是对SSH链路和Agent指令的熟练运用。9. 从这套实战中沉淀下来的一点感悟整套方案跑通后我有一个很深的体会所谓“编排”并不是把所有事情接在一起就会自动变好更核心的是清晰划分每层工具的职责边界。SSH提供通道Hermes Agent负责理解意图和分发任务Claude Code负责具体的代码生成和修改各司其职互不越权。我在这个过程中经历的几次返工几乎都是因为职责划分不清晰导致的。比如最初我想让Claude Code直接去执行SSH命令结果它的终端环境和多台机器的连接配置纠缠在一起搞得一团糟。后来把调度权限交给Hermes AgentClaude Code只管代码问题就迎刃而解了。最后留个建议如果你是第一次搭建不要一上来就追求多任务并行或复杂编排先老老实实跑通一条最简单的“本地指令 - 远程生成代码 - 回传文件”闭环。等这条链路稳定了再往里面加节点、加任务类型、加定时调度。地基扎稳了上面盖几层楼都不怕。