You need to enable JavaScript to run this app. 如何使用Ruby SDK启动的SSM端口转发会话访问远程EC2
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Ruby SDK启动的SSM端口转发会话访问远程EC2

问题本质原因

AWS CLI执行aws ssm start-session做端口转发时,实际承载了两层逻辑:

  1. 后端API层:调用SSM服务的start_session接口完成会话初始校验和协商,返回会话ID、WebSocket数据通道地址、专属鉴权令牌
  2. 本地运行层:自动监听本地指定端口、按SSM规定的会话协议建立WebSocket双向连接、实现本地端口和远程实例端口之间的流量双向透传

你用Ruby SDK调用start_session接口时,只完成了第一层的后端协商流程,完全没有执行本地运行层的逻辑,所以AWS控制台能查到对应的活跃SSM会话,但本地根本没有启动13000端口的监听,更没有把远程3000端口的流量导到本地链路,自然无法通过浏览器访问对应服务。

落地实现步骤
  • 现有ssm.start_session的调用逻辑是完全正确的,保持不变即可,重点是拿全返回值里的session_id、token_value、stream_url三个核心参数
  • 不建议从零实现WebSocket连接、消息格式封装、本地TCP监听的全量逻辑,直接复用本地预装的session-manager-plugin组件就能完全复刻CLI的端口转发效果:
    • 按照插件要求的入参格式,把start_session的返回结果序列化为合法JSON,同时附带目标会话的类型、本地运行的系统平台信息
    • 在Ruby代码里以子进程方式启动该插件进程,插件会自动完成端口监听、数据透传的全流程,直到收到终止信号退出
  • 如果确实需要自研透传能力,需严格匹配SSM会话的协议规范:
    • 建立WSS连接时,把token_value放在请求鉴权信息里完成通道认证
    • 把本地TCP端口收到的请求数据,按协议要求封装为指定格式的消息,推送到WebSocket通道
    • 把WebSocket通道从远程SSM Agent收到的响应数据,解封装后写回本地TCP连接
    • 全程保持本地13000端口的TCP监听,承接本地浏览器发起的访问请求
版本适配提示
  • 你当前使用的Ruby SDK核心3.109.2版本、AWS CLI 2.1.16版本、实例端SSM Agent 3.0.356.0版本,对应的会话协议版本、端口转发参数格式完全对齐,不需要调整start_session接口的入参结构
  • 调用本地session-manager-plugin时需保证插件版本和CLI版本匹配,避免出现消息格式不兼容、连接握手失败的问题

内容的提问来源于stack exchange,提问作者matt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.06 00:54:11