问题描述
我想在 python 代码中使用 session-manager-plugin。
代码写成如下
import boto3
from boto3.session import Session
import subprocess
AWS_REGION = "ap-northeast-1"
AWS_PROFILE = "default"
INSTANCE_ID = "i-XXXXX"
ssm = boto3.client('ssm')
response = ssm.start_session(
Target=INSTANCE_ID,DocumentName='AWS-StartPortForwardingSession',Parameters={
'portNumber': ['3389'],'localPortNumber': ['13389'],}
)
parameters = "{'DocumentName': 'AWS-StartPortForwardingSession','Target': "+INSTANCE_ID+",'Parameters': {'portNumber': ['3389'],'localPortNumber': ['13389']}}"
def start_aws_ssm_plugin(create_session_response,parameters,profile,region):
arg0 = '"' + 'session-manager-plugin' + '"'
arg1 = '"' + str(create_session_response).replace('\'','\\"') + '"'
arg2 = region
arg3 = 'StartSession'
arg4 = profile
arg5 = '"' + str(parameters).replace('\'','\\"') + '"'
arg6 = 'https://ssm.{region}.amazonaws.com'.format(region=region)
command = arg0 + ' ' + arg1 + ' ' + arg2 + ' ' + arg3 + ' ' + arg4 + ' ' + arg5 + ' ' + arg6
pid = subprocess.Popen(command).pid
return pid
start_aws_ssm_plugin(response,AWS_PROFILE,AWS_REGION)
但是,代码出错了。
panic: interface conversion: interface {} is nil,not string
goroutine 1 [running]:
github.com/aws/SSMCLI/src/sessionmanagerplugin/session.ValidateInputAndStartSession(0xc00010c000,0x7,0x8,0x14c2380,0xc000006018)
我参考“https://stackoverflow.com/questions/65963897/how-do-i-use-the-results-of-an-ssm-port-forwarding-session-started-with -ruby/66043222#66043222"
如果您有任何信息,请告诉我。
谢谢
解决方法
据我所知,您需要调用 start-session 端点来获取 streamurl、sessionid 和令牌。然后调用 session-manager-plugin 转发 tty。
https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_StartSession.html