Hermes Agent需通过外围集成实现双因素认证:一、反向代理前置2FA(如Authelia+TOTP);二、OAuth 2.0 IDP强制MFA;三、FIDO2硬件密钥绑定API密钥;四、K8s ServiceAccount令牌嵌入动态验证;五、SSH-Agent联动U2F会话级验证。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您已部署Hermes Agent并希望提升账户访问安全性,则需在现有认证流程中叠加第二重验证因子。Hermes Agent本身不内置TOTP或SMS类原生双因素模块,但可通过外围身份网关与配置层协同实现强认证。以下是实现该目标的多种可行路径:
一、通过反向代理网关集成外部2FA服务
此方法将双因素验证前置至流量入口,无需修改Hermes Agent核心代码,适用于所有部署形态(本地、Docker、K8s),且兼容现有会话管理逻辑。
1、部署Nginx或Caddy作为反向代理,在其配置中启用Google Authenticator PAM模块或使用authelia作为独立认证中间件。
2、配置代理规则,将所有对Hermes Agent Web UI(如/config、/keys、/status)的请求强制经过/auth路径校验。
3、在authelia中启用TOTP策略,绑定用户邮箱并生成密钥二维码供客户端扫描。
4、确保Hermes Agent后端仅监听127.0.0.1:8080等本地端口,禁止公网直连,所有外部访问必须经由带2FA的代理转发。
二、利用OAuth 2.0提供方强制二次确认
借助支持MFA的OAuth 2.0身份提供商(如Auth0、Azure AD、Keycloak),将Hermes Agent的登录流程完全委托给具备强认证能力的IDP,使2FA成为登录链路的强制环节。
1、在Hermes Agent的config.yaml中启用oauth_login: true,并填写client_id、client_secret及authorization_endpoint等字段。
2、于Auth0控制台创建应用,开启MFA策略(如自适应MFA或强制TOTP),并配置Allowed Callback URLs为https://your-domain.com/callback。
3、在Hermes Agent启动时挂载OAuth公钥证书至/etc/hermes/oauth/jwks.json,用于验证ID Token签名。
4、用户首次访问/login时被重定向至Auth0登录页;若检测到未完成MFA,IDP将拦截并引导完成第二步验证,验证通过后才发放可被Agent识别的有效Token。
三、基于API密钥+硬件安全密钥的组合认证
针对CLI或自动化调用场景,可将FIDO2安全密钥(如YubiKey)作为API凭证的解锁机制,实现物理设备级绑定,杜绝密钥盗用风险。
1、使用hermes keys generate --fido2指令生成一对受硬件密钥保护的加密密钥对,私钥永不离开YubiKey芯片。
2、将公钥注册至Hermes Agent的keys管理界面,并标记为“require_hardware_key: true”。
3、当客户端发起含该API密钥的请求时,Agent会返回401响应并附带challenge字段,要求客户端调用WebAuthn API触发YubiKey签名。
4、客户端完成签名后,将signature与原始challenge一并提交至/auth/fido2/verify端点,验证通过后临时签发短期Bearer Token供本次会话使用。
四、在Kubernetes环境中启用ServiceAccount绑定式2FA
适用于K8s集群内运行的Hermes Agent实例,通过扩展Kubernetes原生认证链,在ServiceAccount令牌签发阶段嵌入动态二次验证检查。
1、部署cert-manager与custom admission webhook,拦截对serviceaccounts/token的POST请求。
2、webhook调用外部2FA服务(如Duo或Twilio Verify)发起推送验证,等待用户在手机端点击“允许”或输入6位码。
3、验证成功后,webhook注入一个带时间戳与一次性nonce的JWT扩展声明至Token payload中。
4、Hermes Agent在接收请求时,通过配置tls.ca_file指定的CA证书验证该Token签名,并校验nonce是否未被重放、exp是否在5分钟有效窗口内。
五、启用基于SSH-Agent转发的会话级2FA代理
适用于通过SSH接入Hermes Agent CLI的运维人员,复用系统级SSH密钥体系,在每次会话建立时触发额外生物识别或PIN验证。
1、在目标服务器上配置PAM模块pam_u2f.so,绑定YubiKey或Touch ID设备,并设置auth [success=done default=ignore] pam_u2f.so nouserok cue。
2、确保Hermes Agent运行用户(如hermes-agent)的shell为/usr/bin/bash且禁用密码登录,仅允许密钥认证。
3、用户执行ssh -A user@host连接时,SSH-Agent自动加载U2F凭据;首次建立连接即触发硬件验证。
4、Hermes Agent CLI检测到SSH_CONNECTION环境变量存在且SSH_AUTH_SOCK可访问时,强制调用ssh-add -l验证当前代理中是否存在经U2F签发的活跃密钥,否则拒绝执行敏感命令如hermes config edit或hermes keys rotate。


















