无法通过 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
。
我可以在 Web AWS 控制台上使用会话管理器登录实例。
我可以使用带有 aws ssm start-session --target i-XXX
的 CLI 登录实例。
我无法使用 SSH 登录实例。我尝试了 2 种不同的 OpenSSH 客户端版本:
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 密钥添加到目标实例。
- AWS SSM SSH ProxyComand -> https://gist.github.com/qoomon/fcf2c85194c55aee34b78ddcaa9e83a1
我在私有子网中有一个 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
。
我可以在 Web AWS 控制台上使用会话管理器登录实例。
我可以使用带有
aws ssm start-session --target i-XXX
的 CLI 登录实例。我无法使用 SSH 登录实例。我尝试了 2 种不同的 OpenSSH 客户端版本:
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"
- 对于 AmazonLinux
我还创建了一个简洁的 SSH ProxyCommand 脚本,它在连接到目标实例期间临时将您的 public ssh 密钥添加到目标实例。
- AWS SSM SSH ProxyComand -> https://gist.github.com/qoomon/fcf2c85194c55aee34b78ddcaa9e83a1