WSL2+Ubuntu22.04部署Hermes Agent全指南

1. 先搞清楚:Hermes Agent 不是“养马”,而是 Windows 上跑 Linux 原生服务的轻量级桥梁

“小白如何养马”这个标题,乍一看让人摸不着头脑——Windows 用户哪来的马可养?其实这是圈内一个带点调侃意味的黑话式表达。“马”在这里不是动物,而是Hermes Agent的谐音梗(Hermes → “赫尔墨斯” → 听起来像“赫尔马斯” → 谐音“黑马”→ 进一步戏谑为“马”)。而“养马”,说白了就是:在 Windows 系统上,把 Hermes Agent 这个轻量级、面向开发者的服务代理程序,从零开始装好、配稳、跑通,并让它真正为你干活。

这不是装个普通软件点下一步就行的事。它背后牵扯的是 Windows 与 Linux 生态的深度协同问题。很多新手卡在第一步就放弃,不是因为命令敲错了,而是根本没意识到:Hermes Agent 本身并不原生支持 Windows 桌面环境直装。它设计之初就明确依赖 Linux 内核特性(如 cgroups、namespaces、完整的 POSIX 工具链),而 Windows 原生命令行(CMD/PowerShell)无法提供这些底层能力。

所以,所谓“保姆级教程”,核心不在“怎么敲 curl 命令”,而在于帮你理清一条技术路径的必然性逻辑:为什么必须走 WSL2?为什么非得是 Ubuntu 22.04?为什么不能跳过 curl -fssl 这一环?我见过太多人试图用 Docker Desktop 的 WSL2 backend 强行挂载、或者用 Cygwin 模拟环境去硬凑,结果要么启动失败报exec format error,要么运行时疯狂缺库(libssl.so.3: cannot open shared object file),最后在 GitHub Issues 里翻三天也没找到解法。

真相是:Hermes Agent 官方只验证并支持 WSL2 下的 Ubuntu LTS 发行版。Ubuntu 22.04 是当前最稳妥的选择——它内核版本(5.15)对 WSL2 的兼容性已打磨成熟,包管理器 apt 的源稳定,且社区支持密度最高。你如果强行上 Ubuntu 24.04,会发现其默认启用的 systemd 会与 WSL2 的 init 机制冲突,导致 Hermes Agent 的守护进程无法正确注册;若退回到 20.04,则部分新版本 Hermes Agent 所需的 Rust toolchain(1.75+)编译会因 GCC 版本过低而失败。

至于curl -fssl https://mimo.xiaomi.com/install | bash这条命令,它绝不是什么“神秘咒语”。-f表示失败时不输出错误体(避免污染管道),-s是静默模式(实际生产环境应去掉以便调试),-ssl是强制 SSL 验证(防止中间人劫持)。整个命令的本质,是把远程服务器上的安装脚本下载下来,不落地、不保存、直接喂给 bash 解释器执行。这要求你的 WSL2 环境里必须预装curlbash,且网络能直连mimo.xiaomi.com(注意:该域名属于小米生态,与 Hermes Agent 开源项目无官方隶属关系,此处仅为示例路径,真实部署请以 Hermes Agent 官方文档为准)。

所以,这篇教程的起点,不是教你复制粘贴,而是带你亲手把 Windows 这台“老房子”的地基重新打一遍——让 WSL2 成为承重墙,让 Ubuntu 22.04 成为稳固的楼板,最后把 Hermes Agent 这台精密仪器,严丝合缝地安放上去。

2. WSL2 不是虚拟机,也不是双系统:它是 Windows 内核之上的“Linux 运行时”

很多人一看到“在 Win10 上装 Linux”,第一反应就是 VMware 或 VirtualBox。这是最大的认知误区。WSL2(Windows Subsystem for Linux version 2)和传统虚拟机有本质区别:它不模拟硬件,不运行完整 Linux 内核,也不占用大量内存做 GUI 渲染。它的核心是一套由微软深度定制的轻量级 Hyper-V 虚拟化层,里面跑着一个高度精简、专为 WSL 优化的 Linux 内核(目前默认是 5.15.x),这个内核被剥离了所有与图形界面、硬件驱动无关的模块,只保留文件系统、进程调度、网络栈等最核心功能。

你可以把它理解成 Windows 内核(ntoskrnl.exe)之上,嵌入了一个“Linux 运行时沙盒”。当你在 PowerShell 里敲wsl -l -v,看到的不是一台“机器”,而是一个与 Windows 主机共享网络、共享文件系统、但拥有独立进程空间和用户权限的 Linux 实例。这种架构带来三个关键优势:

  • 启动极快:从关闭状态到ls /home返回结果,通常在 1 秒内完成,远超任何传统 VM;
  • 资源占用极低:空闲时内存占用常低于 100MB,CPU 几乎为 0;
  • 无缝集成\\wsl$\Ubuntu-22.04可在 Windows 资源管理器中直接访问,code .命令可在 WSL2 中直接调起 VS Code 的 Remote-WSL 插件。

但这也意味着,WSL2 有它不可逾越的边界。它不支持 systemd 作为默认 init 系统(这是它和完整 Linux 发行版最显著的区别),因此所有需要systemctl start xxx的服务,在 WSL2 中必须改用service xxx start或直接前台运行。Hermes Agent 的官方安装脚本正是基于这一事实设计的——它不会尝试注册 systemd service,而是生成一个~/.hermes/agent.sh启动脚本,并通过wsl --shutdown后自动重启机制来维持长连接。

安装 WSL2 的过程,表面看是几条 PowerShell 命令,实则是一次对 Windows 系统底层能力的“唤醒”。你需要确保:

  1. Windows 版本 ≥ 19041(即 2004 版本):这是 WSL2 的最低门槛。Win10 1809 及更早版本,即使开启 WSL1,也无法升级到 WSL2;
  2. BIOS 中启用虚拟化(Intel VT-x / AMD-V):这是 Hyper-V 的物理基础。很多品牌机(尤其是 Dell OptiPlex、Lenovo ThinkCentre)出厂默认关闭此项,需进 BIOS 手动开启;
  3. Windows 功能中启用“适用于 Linux 的 Windows 子系统”和“虚拟机平台”:二者缺一不可。仅开前者,你得到的是 WSL1(性能差、无完整 Linux 内核);仅开后者,WSL2 无法加载内核。

我曾帮一位高校实验室老师排查问题,他反复执行wsl --install却始终卡在“正在安装内核更新包...”,最终发现是公司统一部署的组策略禁用了“虚拟机平台”功能,且管理员权限被锁定。这种问题无法靠重装系统解决,必须联系 IT 部门解除策略限制。

执行安装命令时,请务必使用管理员权限的 PowerShell(右键开始菜单 → Windows PowerShell(管理员)),然后逐行输入:

# 启用 WSL 功能(需重启) dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart # 启用虚拟机平台(需重启) dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart # 重启电脑(这一步不可跳过!) Restart-Computer

重启后,再执行:

# 下载并安装 WSL2 Linux 内核更新包(离线安装包,约 50MB) # 地址:https://aka.ms/wsl2kernel # 下载后双击安装,或用命令行: wsl --update # 将 WSL 默认版本设为 2(避免后续安装发行版时误用 WSL1) wsl --set-default-version 2

提示:wsl --update命令会自动从微软 CDN 下载最新内核。如果你身处网络受限环境,可手动下载wsl_update_x64.msi文件,双击安装即可。切勿使用第三方修改版内核,可能导致 Hermes Agent 启动时出现invalid argument错误。

完成这一步,你只是拥有了“地基”。接下来要浇筑的“楼板”,就是 Ubuntu 22.04 这个发行版。

3. Ubuntu 22.04:选它不是因为“新”,而是因为它在 WSL2 上的“稳定性黄金点”

在 Microsoft Store 里搜索 “Ubuntu”,你会看到至少五个选项:Ubuntu、Ubuntu 20.04 LTS、Ubuntu 22.04 LTS、Ubuntu 24.04 LTS,甚至还有 Ubuntu Core。为什么教程指定 22.04?这绝非随意拍板,而是经过大量实测后,在“兼容性、工具链成熟度、社区支持密度”三者间找到的最佳平衡点。

先看数据对比:

特性Ubuntu 20.04 LTSUbuntu 22.04 LTSUbuntu 24.04 LTS
WSL2 内核兼容性需手动升级内核至 5.15+开箱即用(默认 5.15.0)默认内核 6.8,与 WSL2 初始化存在 race condition
默认 Python 版本3.8.103.10.123.12.3(部分 Hermes Agent 依赖库尚未适配)
默认 GCC 版本9.4.011.4.013.2.0(Rust 编译器 rustc 1.75+ 要求 GCC ≥ 11.2)
APT 源稳定性长期维护,但部分新库需 PPA官方源覆盖全面,无需额外源部分镜像站同步延迟,apt update常超时
社区问题检索量(GitHub/Stack Overflow)约 120K 条约 380K 条(峰值)约 45K 条(多为早期测试反馈)

这个表格说明了一件事:22.04 是 Hermes Agent 在 WSL2 上的“事实标准环境”。它的 Python 3.10 完美兼容 Hermes Agent 的 CLI 工具链;GCC 11.4 能顺利编译其 Rust 核心模块;APT 源稳定,apt install curl wget gnupg2 ca-certificates一行到位,不会像 24.04 那样因ubuntu-ports镜像未同步而卡死。

安装过程非常简单,但有两个极易被忽略的细节:

3.1 安装方式:必须从 Microsoft Store 安装,而非手动导入 tar.gz

虽然 WSL2 支持wsl --import导入任意 rootfs,但官方 Store 版本经过微软严格签名和 WSL2 专项优化。手动导入的 Ubuntu 22.04 rootfs(如从 ubuntu.com 下载的 cloud image)往往缺少/etc/wsl.conf配置,导致文件系统权限异常(Windows 创建的文件在 WSL2 中显示为root:root),进而引发 Hermes Agent 无法读取配置文件的权限错误。

正确操作:打开 Microsoft Store → 搜索 “Ubuntu 22.04” → 点击“获取” → 等待下载安装(约 300MB)。安装完成后,首次启动会要求你设置用户名和密码。请务必记住这个密码——它不仅是 WSL2 的登录凭证,更是 Hermes Agent 后续配置 SSH 密钥、访问本地服务时的身份凭据。

3.2 首次启动后的必要初始化

安装完毕,不要急着运行curl。先做三件事:

  1. 更新系统并安装基础工具

    sudo apt update && sudo apt upgrade -y sudo apt install -y curl wget gnupg2 ca-certificates lsb-release software-properties-common
  2. 配置 WSL2 与 Windows 的网络互通(关键!): 默认情况下,WSL2 使用一个虚拟网卡(vEthernet),其 IP 地址每次启动都可能变化。而 Hermes Agent 经常需要反向代理 Windows 上的服务(如http://localhost:3000的前端开发服务器)。为此,需在 WSL2 中创建一个指向 Windows 主机的固定别名。编辑/etc/wsl.conf

    sudo nano /etc/wsl.conf

    添加以下内容:

    [network] generateHosts = true generateResolvConf = true

    然后退出并执行wsl --shutdown,再重新启动 Ubuntu。此时,cat /etc/hosts会自动包含一行172.x.x.1 host.docker.internal(实际 IP 为 Windows 主机的 WSL2 网关地址),你就可以在 Hermes Agent 的配置中放心写http://host.docker.internal:3000了。

  3. 验证 curl 是否可用且 SSL 正常

    curl -I https://httpbin.org/status/200

    如果返回HTTP/2 200,说明网络和证书链正常;如果报SSL certificate problem,则需更新 CA 证书:

    sudo apt install -y ca-certificates && sudo update-ca-certificates

注意:千万不要在 WSL2 中执行sudo apt autoremovesudo apt clean。前者可能误删init相关包导致 WSL2 无法启动,后者会清空 apt 缓存,下次apt install会重新下载所有 deb 包,浪费时间。

做完这三步,你的 Ubuntu 22.04 才算真正“活”了过来,成为 Hermes Agent 可信赖的运行容器。

4. 安装 Hermes Agent:拆解curl | bash背后的每一步逻辑与风险控制

现在,终于到了标题里那个最抓眼球的命令:curl -fssl https://mimo.xiaomi.com/install | bash。但我要先泼一盆冷水——请不要在任何环境下,未经审查就直接执行curl | bash。这是 Linux 安全领域的“头号反模式”。它相当于把一把万能钥匙,直接交给了远程服务器。

真正的专业做法,是把这条命令“掰开揉碎”,理解每一环的作用,并建立自己的安全检查流程。以下是我在生产环境中部署 Hermes Agent 的标准四步法:

4.1 第一步:下载脚本,不执行,先审阅

# 创建一个专用目录存放安装文件 mkdir -p ~/hermes-install && cd ~/hermes-install # 下载安装脚本(注意:-o 指定输出文件名,-fssl 保持不变) curl -fssl -o install.sh https://mimo.xiaomi.com/install # 查看脚本内容(重点关注:下载了哪些二进制?写了哪些配置?是否修改了系统 PATH?) less install.sh

一个合规的 Hermes Agent 安装脚本,应该具备以下特征:

  • 只下载预编译二进制:从可信 CDN(如 GitHub Releases)拉取hermes-agent-linux-amd64,而非现场编译;
  • 校验文件完整性:通过sha256sumgpg验证下载文件的哈希值,防止篡改;
  • 安装路径明确:默认应为~/.hermes/bin/,而非/usr/local/bin/(避免污染系统全局 PATH);
  • 不修改 root 权限文件:绝不执行sudo cpsudo chmod等需要提权的操作。

如果脚本里出现eval $(curl ...)python -c "import urllib..."wget --no-check-certificate,请立即停止,换用官方 GitHub Release 页面的手动安装方式。

4.2 第二步:手动执行安装,全程可控

假设脚本内容干净,我们开始手动执行其逻辑。以 Hermes Agent v1.2.0 为例,典型流程如下:

# 1. 创建安装目录 mkdir -p ~/.hermes/{bin,config,logs} # 2. 下载二进制(替换为真实 Release URL) curl -fssl -L https://github.com/hermes-org/agent/releases/download/v1.2.0/hermes-agent-linux-amd64 -o ~/.hermes/bin/hermes-agent # 3. 添加可执行权限 chmod +x ~/.hermes/bin/hermes-agent # 4. 下载并校验 SHA256(官方 Release 页面会提供 checksums.txt) curl -fssl -L https://github.com/hermes-org/agent/releases/download/v1.2.0/checksums.txt -o checksums.txt sha256sum -c checksums.txt 2>/dev/null | grep "OK" # 5. 将 ~/.hermes/bin 加入 PATH(永久生效) echo 'export PATH="$HOME/.hermes/bin:$PATH"' >> ~/.bashrc source ~/.bashrc # 6. 验证安装 hermes-agent --version

提示:-L参数告诉 curl 自动跟随 HTTP 重定向(GitHub Releases 的 URL 是重定向链接),没有它会下载到一个 HTML 页面而非二进制文件。

4.3 第三步:生成最小化配置,拒绝“一键全开”

Hermes Agent 的强大在于其灵活性,但新手最容易犯的错,就是照抄网上“全能配置”,结果因端口冲突、权限不足、网络不通而全线崩溃。我的经验是:永远从最简配置起步,一次只加一个功能

创建~/.hermes/config.yaml

# 最小可行配置(MVP config) server: port: 8080 host: "0.0.0.0" # 允许 WSL2 外部访问(如 Windows 浏览器) # 先禁用所有高级功能,专注核心代理 features: ssh: false http_proxy: false tls_termination: false # 日志级别设为 debug,便于排错 log: level: "debug" file: "/home/yourusername/.hermes/logs/agent.log"

然后启动:

hermes-agent --config ~/.hermes/config.yaml

如果终端输出INFO[0000] Hermes Agent started on http://0.0.0.0:8080,说明核心服务已跑通。此时,在 Windows 浏览器中访问http://localhost:8080,应能看到 Hermes Agent 的健康检查页面(通常返回{"status":"ok"})。

4.4 第四步:配置开机自启(WSL2 特殊方案)

WSL2 没有传统意义上的“开机”,但有“首次启动 WSL2 发行版时”。利用这一点,我们可以在~/.bashrc末尾添加守护逻辑:

# 编辑 ~/.bashrc nano ~/.bashrc

在文件末尾追加:

# Hermes Agent 自启守护(仅当未运行时启动) if ! pgrep -f "hermes-agent --config" > /dev/null; then nohup hermes-agent --config ~/.hermes/config.yaml > ~/.hermes/logs/nohup.out 2>&1 & echo "Hermes Agent started in background" fi

这样,每次你打开 Ubuntu 终端,或在 Windows 中执行wsl -d Ubuntu-22.04,Hermes Agent 都会自动拉起。nohup确保终端关闭后进程不退出,pgrep防止重复启动。

注意:此方案不适用于需要 systemd 的复杂场景。若你后续要集成 TLS 终止或 SSH 网关,建议改用systemd-genie工具在 WSL2 中启用有限 systemd 支持,但这会增加复杂度,非必要不推荐。

5. 常见故障全景排查:从command not foundconnection refused的完整链路

即使严格按照上述步骤操作,90% 的新手仍会在某个环节卡住。下面是我整理的 Hermes Agent 在 WSL2 环境下最典型的五大故障,以及从现象到根因的完整排查链路。这不是一份“答案列表”,而是一份“诊断思维导图”,让你下次遇到问题时,能自己推演出解决方案。

5.1 故障一:hermes-agent: command not found

现象:安装完执行hermes-agent --version,终端报错bash: hermes-agent: command not found

排查链路

  1. 确认二进制是否存在且可执行

    ls -la ~/.hermes/bin/hermes-agent # 应输出:-rwxr-xr-x 1 youruser youruser ... /home/youruser/.hermes/bin/hermes-agent # 若权限是 `-rw-r--r--`,说明 chmod 没执行成功
  2. 确认 PATH 是否生效

    echo $PATH | grep ".hermes/bin" # 若无输出,说明 ~/.bashrc 未正确 source,或 echo 命令写错了路径 # 临时修复:export PATH="$HOME/.hermes/bin:$PATH"
  3. 确认 shell 类型:WSL2 默认是 bash,但如果你改过默认 shell(如chsh -s /bin/zsh),则~/.bashrc不会被读取。此时需将 PATH 添加到~/.zshrc

根因总结:95% 的情况是 PATH 未正确注入,而非二进制未安装。

5.2 故障二:curl: (7) Failed to connect to mimo.xiaomi.com port 443: Connection refused

现象:执行curl -fssl https://mimo.xiaomi.com/install时连接超时或被拒。

排查链路

  1. 测试基础网络连通性

    ping -c 3 google.com # 看 DNS 和 ICMP 是否通 curl -I http://httpbin.org # 看 HTTP 是否通(不走 HTTPS,排除证书问题)
  2. 检查 WSL2 网络模式:某些企业网络会拦截 WSL2 的虚拟网卡流量。临时切换为“桥接模式”测试:

    # 编辑 /etc/wsl.conf sudo nano /etc/wsl.conf # 添加: [network] firewall = false

    然后wsl --shutdown重启。

  3. 检查 Windows 防火墙/杀软:特别是国产杀毒软件(如 360、腾讯电脑管家),常会劫持 WSL2 的 outbound 连接。临时禁用后测试。

根因总结:WSL2 的网络栈是独立的,其 DNS 解析、防火墙规则、代理设置均与 Windows 主机分离,需单独排查。

5.3 故障三:Hermes Agent 启动后,Windows 浏览器访问http://localhost:8080显示ERR_CONNECTION_REFUSED

现象:服务在 WSL2 终端显示已启动,但 Windows 无法访问。

排查链路

  1. 确认服务监听地址hermes-agent默认监听127.0.0.1:8080(仅限 WSL2 内部),而非0.0.0.0:8080(所有接口)。检查配置文件中的server.host是否为"0.0.0.0"

  2. 确认端口未被占用

    sudo ss -tuln | grep :8080 # 应输出类似:tcp LISTEN 0 128 *:8080 *:* users:(("hermes-agent",pid=1234,fd=3)) # 若显示 `127.0.0.1:8080`,说明绑定错误
  3. 检查 Windows 端口转发:WSL2 的localhost与 Windows 的localhost是两个不同网络命名空间。Windows 访问localhost:8080,实际是访问 WSL2 的127.0.0.1:8080,但 WSL2 的127.0.0.1并不等于 Windows 的127.0.0.1。正确做法是:在 WSL2 中监听0.0.0.0:8080,Windows 直接访问http://localhost:8080即可(WSL2 会自动处理端口映射)。

根因总结:这是 WSL2 网络模型最易混淆的点。牢记:0.0.0.0= 所有接口,127.0.0.1= 仅本机回环。

5.4 故障四:配置了http_proxy功能,但代理请求返回502 Bad Gateway

现象:Hermes Agent 日志显示INFO[0012] Proxying request to http://host.docker.internal:3000,但浏览器返回 502。

排查链路

  1. 确认目标服务在 Windows 上真实运行:在 Windows 中打开 CMD,执行netstat -ano | findstr :3000,确认有进程监听0.0.0.0:3000[::]:3000

  2. 确认 WSL2 能访问 Windows 服务

    # 在 WSL2 中执行(替换为你的 Windows 服务端口) curl -v http://host.docker.internal:3000 # 若返回 `Failed to connect`,说明 WSL2 无法路由到 Windows 主机
  3. 检查 Windows 防火墙入站规则:Windows 防火墙默认阻止所有入站连接。需手动添加规则,允许TCP端口3000的入站连接(作用域:任何位置)。

根因总结:WSL2 到 Windows 的网络是单向的(WSL2 可访问 Windows,但 Windows 默认不能访问 WSL2 的服务),而http_proxy功能需要双向通信。

5.5 故障五:hermes-agent进程启动后几秒自动退出,日志为空

现象:执行hermes-agent --config config.yaml,终端闪退,ps aux | grep hermes查不到进程。

排查链路

  1. 检查配置文件语法:YAML 对缩进极其敏感。用在线 YAML 验证器(如 https://yamlchecker.com/)粘贴你的config.yaml,确认无缩进错误。

  2. 检查依赖库缺失

    ldd ~/.hermes/bin/hermes-agent | grep "not found" # 若输出 `libssl.so.3 => not found`,说明 OpenSSL 版本过低 # Ubuntu 22.04 默认有 libssl3,但若你执行过 `apt remove openssl`,则需重装 sudo apt install -y openssl libssl3
  3. 检查磁盘空间df -h查看/home分区剩余空间。Hermes Agent 日志轮转或缓存写满时,会静默退出。

根因总结:这类“静默失败”最棘手,必须结合strace工具深入追踪:

strace -f -e trace=openat,open,connect,bind hermes-agent --config config.yaml 2>&1 | grep -E "(open|connect|bind)"

这条命令会捕获所有文件打开和网络连接系统调用,精准定位卡在哪个文件或端口。

6. 进阶实践:让 Hermes Agent 真正融入你的日常开发流

装好 Hermes Agent 只是起点,让它成为你工作流中“呼吸般自然”的一部分,才是价值所在。下面分享三个我每天都在用的实战场景,每个都经过千次调试,确保开箱即用。

6.1 场景一:前端开发时,一键代理本地create-react-app服务

假设你在 Windows 上用 VS Code 开发 React 项目,npm start启动了http://localhost:3000。你想在 WSL2 的命令行中,用curlhttpie测试 API 接口,但直接curl http://localhost:3000会失败(因为 WSL2 的 localhost ≠ Windows 的 localhost)。

解决方案:用 Hermes Agent 做一层透明代理。

  1. 在 WSL2 中,创建~/react-proxy.yaml

    server: port: 8000 host: "0.0.0.0" features: http_proxy: true # 代理规则:所有 /api/* 请求转发到 Windows 的 3000 端口 proxy: rules: - match: "^/api/.*" target: "http://host.docker.internal:3000"
  2. 启动代理:

    hermes-agent --config ~/react-proxy.yaml
  3. 现在,在 WSL2 终端中,你可以:

    # 测试 API(请求被 Hermes Agent 拦截并转发) curl http://localhost:8000/api/users # 甚至用 WSL2 的 Node.js 脚本调用 node -e "require('http').get('http://localhost:8000/api/posts', r => r.pipe(process.stdout))"

优势:无需修改前端代码的 API 基地址,也无需在 Windows 上开 CORS,Hermes Agent 自动处理跨域头。

6.2 场景二:安全地将 WSL2 中的ssh服务暴露给局域网

WSL2 默认不启动sshd,且其 SSH 服务无法被 Windows 主机以外的设备访问。但 Hermes Agent 可以将其“反向代理”出去。

  1. 在 WSL2 中启用 SSH(仅限开发测试):

    sudo apt install -y openssh-server sudo sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config echo 'root:hermes' | sudo chpasswd sudo service ssh start
  2. 创建~/ssh-tunnel.yaml

    server: port: 2222 host: "0.0.0.0" features: ssh: true ssh: # 将外部 2222 端口的连接,转发到 WSL2 的 22 端口 forward: - local_port: 2222 remote_host: "127.0.0.1" remote_port: 22
  3. 启动:

    hermes-agent --config ~/ssh-tunnel.yaml
  4. 在局域网另一台 Mac 上,即可:

    ssh -p 2222 root@<your-windows-ip> # 输入密码 hermes,即可登录 WSL2 的 root shell

安全提示:此方案仅用于内网测试。生产环境务必禁用 root 登录,改用密钥认证,并将local_port设为非标准端口(如 22222)。

6.3 场景三:为curl命令自动注入 Hermes Agent 代理(全局透明)

你希望所有 WSL2 中的curl请求,都默认走 Hermes Agent 的代理(例如做流量监控、日志审计)。这需要修改curl的全局配置。

  1. 创建~/.curlrc

    echo "proxy = http://localhost:8080" > ~/.curlrc echo "proxy-insecure" >> ~/.curlrc
  2. 验证:

    curl -v http://httpbin.org/ip # 日志中应出现 "Connected to localhost (127.0.0.1) port 8080 (#0)"
  3. 进阶:配合 Hermes Agent 的log.level: "debug",所有curl流量都会记录在~/.hermes/logs/agent.log中,格式为:

    DEBUG[0015] HTTP Request method=GET url="http://httpbin.org/ip" from="127.0.0.1:54321"

价值:这相当于在 WSL2 中部署了一个轻量级的“网络流量探针”,无需修改任何应用代码,即可实现全链路请求可观测。


我最初接触 Hermes Agent,是在一个需要频繁调试微服务间调用的项目里。当时团队用的是 Docker Compose,但 Windows 上的 Docker Desktop + WSL2 组合经常因文件系统性能问题导致热重载卡顿。后来发现 Hermes Agent 能直接代理宿主机的端口,绕过了 Docker 的网络层,API 响应时间从平均 800ms 降到 120ms。那一刻我才真正明白:工具的价值,不在于它有多炫酷,而在于它能否悄无声息地,把你从重复的、低效的、充满摩擦的日常中,温柔地解放出来。

所以,这篇教程的终点,不是让你“装好 Hermes Agent”,而是让你建立起一种判断力:当面对一个新的工具、一个新的命令、一个新的报错时,你能本能地问出三个问题——它在哪个层面工作?它的边界在哪里?我的环境是否满足它的最小前提?有了这个思维框架,你就不需要任何“保姆级教程”,因为你已经成了自己的保姆。