我正在开始一个会话,使用 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来做这种事情,因为在启动会话后打开浏览器似乎并不像手动那样有效。
希望我只是错过了一些东西。
假设你已经安装了Session Manager Plugin,如图所示。https:/docs.aws.amazon.comsystems-managerlatestuserguidesession-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.