无法通过 AWS Session Manager 获得 SSH 连接

Can't get SSH connections through AWS Session Manager working

我在私有子网中有一个 EC2 实例,我想在其中复制文件。

我想通过会话管理器使用安全文件复制而不是 S3 存储桶,如 here and announced on here 中所述。

运行ning EC2 实例附加了包含策略 AmazonEC2RoleforSSM 的实例配置文件。在我的本地计算机 (macOS 10.14.5) 上安装了 AWS CLI (aws-cli/1.16.195) 和会话管理器插件 (1.1.26.0) 并相应地配置了 .ssh/config

OpenSSH_7.9p1:

当我 运行 ssh ec2-user@i-XXX 它无限挂起。但是我可以在会话管理器中看到一个 connected 会话。当我 SIGTERM 进程时,我得到以下输出并且会话终止:

Command '['session-manager-plugin', '{"SessionId": "XXX", "TokenValue": "XXX", "StreamUrl": "wss://ssmmessages.eu-central-1.amazonaws.com/v1/data-channel/XXX?role=publish_subscribe", "ResponseMetadata": {"RetryAttempts": 0, "HTTPStatusCode": 200, "RequestId": "XXX", "HTTPHeaders": {"x-amzn-requestid": "XXX", "date": "Wed, 07 Aug 2019 08:47:23 GMT", "content-length": "579", "content-type": "application/x-amz-json-1.1"}}}', 'eu-central-1', 'StartSession', u'cc', '{"DocumentName": "AWS-StartSSHSession", "Target": "i-XXX", "Parameters": {"portNumber": ["22"]}}', u'https://ssm.eu-central-1.amazonaws.com']' returned non-zero exit status -13

OpenSSH_8.0p1:

当我 运行 ssh ec2-user@i-XXX 出现以下错误,需要在会话管理器中手动终止会话:

kex_exchange_identification: banner line contains invalid characters

我刚从 AWS Support 得到答复,它现在对我有用。以下组件之一存在错误。

确保至少有以下版本,然后它应该可以工作。

本地

  • aws cli: aws-cli/1.16.213 Python/3.7.2 Darwin/18.7.0 botocore/1.12.203
    • aws --version
  • 会话管理器插件:1.1.26.0
    • session-manager-plugin --version

目标 ec2 实例

  • 亚马逊-ssm-代理:2.3.687.0
    • 对于 AmazonLinux yum info amazon-ssm-agent | grep "^Version"

我还创建了一个简洁的 SSH ProxyCommand 脚本,它在连接到目标实例期间临时将您的 public ssh 密钥添加到目标实例。