我无法协调使用 aws cli 和 ruby sdk 与实例建立 ssm 连接之间的差异。例如,如果我尝试使用如下命令:
aws ssm start-session \
--target 'i-abc123' \
--document-name AWS-StartPortForwardingSession \
--parameters '{
"portNumber": ["3000"],
"localPortNumber": ["13000"]
}'
Starting session with SessionId: username-def456
Port 13000 opened for sessionId username-def456.
Waiting for connections...
Connection accepted for session [username-def456]
该工具将暂停,因为它打开了从目标实例上的端口 3000 到我的本地计算机上的端口 13000 的端口转发会话。然后,我可以在我的机器上打开一个 Web 浏览器并将其指向http://localhost:13000
以浏览远程实例上运行的应用程序。此外,我可以查看 AWS 控制台 UI 并看到有一个活动会话,直到我 Ctrl-C
我遇到的麻烦是当我尝试使用 ruby sdk 做同样的事情时:
result = ssm.start_session(
target: 'i-abc123',
document_name: 'AWS-StartPortForwardingSession',
parameters: {
'portNumber' => %w[3000],
'localPortNumber' => %w[13000]
}
)
该result
对象是一个结构,如下所示:
=> #<struct Aws::SSM::Types::StartSessionResponse
session_id="username-def456",
token_value="...",
stream_url="wss://ssmmessages.us-east-1.amazonaws.com/v1/data-channel/username-def456?
role=publish_subscribe">
同样,我可以在控制台 UI 中看到有一个活动会话。但是,如果我尝试http://localhost:13000
在我的机器上浏览,浏览器将无法访问任何内容。如何使用生成的流 url 和令牌来实际创建到 ec2 实例的连接?
额外细节:
- ruby sdk 的核心 gem 版本:3.109.2
- aws cli 版本 - aws-cli/2.1.16
- aws ssm 代理版本 - amazon-ssm-agent-3.0.356.0-1.x86_64