如何通过 Java SDK 使用 AWS 端口转发会话

2024-03-31

我正在使用开始一个会话AWSSimpleSystemsManagementAsync如下:

Map<String, List<String>> parameters = new HashMap<>();
parameters.put("portNumber", Arrays.asList("80"));
parameters.put("localPortNumber", Arrays.asList("8080"));

StartSessionResult result =
    getSsmClient()
        .startSession(
            new StartSessionRequest()
                .withTarget(sb.toString())
                .withDocumentName("AWS-StartPortForwardingSession")
                .withParameters(parameters));

sessionId = result.getSessionId();

这似乎有效并模仿了我可以手动执行的操作:

aws ssm start-session --target "Your Instance ID" --document-name AWS-StartPortForwardingSession --parameters "portNumber"=["80"],"localPortNumber"=["8080"]

当我手动运行时,我会在 localhost:8080 打开浏览器,以便根据需要与我的应用程序进行交互,但我很难通过 SDK 执行此类操作,因为在启动会话后打开浏览器似乎不起作用就像手动操作一样。

希望我只是错过了一些东西。


假设您已经按照以下步骤安装了会话管理器插件https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html

下一步将通过生成一个新的会话管理器插件进程将其附加到新创建的会话中,如下所示。

...
StartSessionResult result = ssmClient.startSession(ssRequest);

StringBuilder responseJson = new StringBuilder("{");
responseJson.append("\"SessionId\":");
responseJson.append("\"");
responseJson.append(result.getSessionId());
responseJson.append("\"");
responseJson.append(",\"TokenValue\":");
responseJson.append("\"");
responseJson.append(result.getTokenValue());
responseJson.append("\"");
responseJson.append(",\"StreamUrl\":");
responseJson.append("\"");
responseJson.append(result.getStreamUrl());
responseJson.append("\"");
responseJson.append("}");

List<String> arguments = new ArrayList<>();
arguments.add("session-manager-plugin");
arguments.add(responseJson.toString());
arguments.add(AWS_REGION); // Whatever region you use
arguments.add("StartSession");
arguments.add(AWS_PROFILE_NAME); // Whatever profile you use
arguments.add("{\"Target\":\"i-xxxx\",\"DocumentName\":\"AWS-StartPortForwardingSession\",\"Parameters\":{\"portNumber\":[\"xx\"],\"localPortNumber\":[\"yyyy\"]}}");
arguments.add("https://ssm.us-east-1.amazonaws.com/"); // SSM regional endpoint

try {
    ProcessBuilder pb = new ProcessBuilder(arguments.toArray(new String[] {}));
    pb.redirectErrorStream(true);
    Process p = pb.start();
    BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String line;
    while (true) {
        line = r.readLine();
        if (line == null) { break; }
        System.out.println(line);
    }
} catch (IOException e) {
    e.printStackTrace();
}

该片段应在控制台中产生以下内容

Starting session with SessionId: aws-sdk-java-zzzz
Port yyyy opened for sessionId aws-sdk-java-zzzz.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过 Java SDK 使用 AWS 端口转发会话 的相关文章

随机推荐

  • 使用 msmtp 通过终端发送邮件工作正常,但不适用于 php mail()

    最近我在运行 kubuntu 桌面的 ubuntu 12 04 服务器上安装了 msmtp msmtp 的安装工作正常 我什至可以使用 gmail 的 smtp 服务器通过终端发送邮件 我的问题是 虽然可以通过终端发送邮件 但它仍然无法使用
  • 如何从文本文件中获取特定行并在android中显示数组列表

    我有一个文本文件 我能够读取完整内容并将其显示在视图上 文本文件的示例格式 userdetail William Bits 6th cross road City house Rio lt 051 22345690 gt lt 002 22
  • 如何清除 dropzone.js dropzone

    我开始使用 dropzone js 并遇到了一个小问题 我能够上传文件 我使用模式弹出窗口来获取文件信息 问题是当我返回时 我之前上传的文件仍然在放置区域中 带有复选标记 我想要一个空的拖放区 Ideas 我看到的所有答案都涉及在初始化 d
  • xlwings Book.save() 错误:Workbook 类的 SaveAs 方法失败

    我正在打开一个 Excel 文件wb使用 xlwings 进行一些操作 然后尝试将其保存到目录中 问题是正常的 xw Book save 偶尔会引发错误 对于我继续使用此代码来说 至关重要的是我可以相信它不会抛出错误 下面的代码给我以下错误
  • Android 工作管理器:“无法实例化 Worker”

    我已经按照Android 开发者的 https developer android com topic libraries architecture workmanager basics workflow有关使用工作线程管理器结构在后台运行
  • 应用商店的演示视频? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我将我的应用程序上传到 itunes connect 我等了几天 然后我上传的应用程序被拒绝 原因之一是我没有使用我的应用程序的演示视频
  • JavaScript: 假 ||未定义与未定义 ||错误的

    行为的解释是什么运算符 逻辑或 当与false and undefinedJavaScript 中的两边 1 gt false undefined undefined 2 gt undefined false false 逻辑性OR运算符不
  • 有没有办法访问私有 plsql 过程以进行测试?

    我正在开发一个包含大量 plsql 代码的项目 并希望向我们的代码库添加更具体的单元测试 我喜欢测试的一些过程 函数不在包规范中 我无法更改它 有没有办法访问这些 私有 plsql 过程而不将它们添加到规范中 到目前为止 我唯一的想法是在测
  • 如何在 ColdFusion 中用空/零字节填充字符串以及 MacOS 和 Windows 上的 CF 之间的差异

    我无法理解如何用空字节填充 CF 中的字符串 在Java中我会这样做 String ZeroPad for int i 0 i lt 32 i ZeroPad ZeroPad 0 String strKey strUsername strP
  • 使用 Unity 和 MVVM 在 WPF 中保留用户凭据

    尽管我在 Windows 应用程序中做了类似的事情 但我在这方面的表现却很糟糕 我正在开发 WPF 应用程序 Prism Unity MVVM 并且刚刚完成登录视图 一旦根据 SQL Server 中的表验证了用户的凭据 我将执行以下操作
  • 如何将数据从选项卡栏控制器传递到其选项卡之一?

    我在故事板中设置了一个 UITabBarController 我想从选项卡栏控制器传递数据字典以在适当的子选项卡中使用 这是一个标准的 UIViewController 这似乎是一个很长的问题要回答 但我真的不知道从哪里开始 我正在寻找最简
  • 如果 cellForRowAtIndexPath 未调用,如何更改 UITableViewCell 外观

    我的应用程序中有一个表格视图 表视图单元格具有带有图案图像的背景 表格视图内容正在发生变化 有时只有两三个单元格包含内容信息 表格视图会自动将其他单元格添加到屏幕底部 问题是这些单元格的背景很清晰 但我想让背景与其他单元格相同 带有图案图像
  • 使用可选参数来实现向后兼容性是一个好主意吗?

    我想知道如何通过使用可选参数来提供向后兼容性 在我的程序中 我有一个带有函数的接口 该函数在整个程序以及许多单元测试中使用 对于某些新功能 必须将布尔值传递到此函数中 如果设置为 则会改变其行为false 如果你通过true 您将得到与以前
  • R - 将数据帧转换为时间序列[重复]

    这个问题在这里已经有答案了 我有谷歌股票数据 它有两列 日期 每日数据 和 收盘价 即 Google 收盘指数 Date Close 10 11 2013 871 99 10 10 2013 868 24 10 9 2013 855 86
  • 仅使用 .wt 文件恢复 MongoDB

    我的电脑崩溃了 我可以使用 wt 文件取回我的数据吗 旧 MongoDB 中的 wt 文件 您可以恢复您的 wt从 Atlas Backup 作为恢复文件夹解压或解压 下载的 WiredTiger 文件到本地 MongoDB 首先 备份您的
  • 如何为 LinearLayout 制作渐变背景?

    我想知道 在java 而不是xml 中为LinearLayout制作渐变背景的最佳方法是什么 有任何想法吗 Thanks
  • 从类内重定向到操作的正确方法?

    背景 我有一个项目分为 Webform 和 MVC 谢天谢地 正在转向 MVC 我有一个LoginManager包含一个类IRedirectionManager类 并根据用户属性 已通过身份验证 密码过期 尚未接受条款 调用重定向管理器上的
  • 在javascript中将字符串分割成句子

    目前我正在开发一个将长列分成短列的应用程序 为此 我将整个文本拆分为单词 但目前我的正则表达式也拆分了数字 我所做的是这样的 str This is a long string with some numbers 125 000 55 an
  • 声明 C++ 不可变类的惯用方式

    所以我有一些相当广泛的功能代码 其中主要数据类型是不可变的结构 类 我声明不变性的方式是通过将成员变量和任何方法设置为 const 来 实际上是不可变的 struct RockSolid const float x const float
  • 如何通过 Java SDK 使用 AWS 端口转发会话

    我正在使用开始一个会话AWSSimpleSystemsManagementAsync如下 Map