TL;DR: --我正在使用一个自动规模组生成一个EC2实例,并且我可以连接到它。但是,我无法使用我在自动规模组中指定的SSH密钥对成功地登录到该实例。
我已经使用Terraform创建了一个自动规模组来启动一个EC2实例。下面是自动示波器组:
module "ssh_key_pair" {
source = "cloudposse/key-pair/aws"
version = "0.18.3"
name = "myproj-ec2"
ssh_public_key_path = "."
generate_ssh_key = true
}
module "autoscale_group" {
source = "cloudposse/ec2-autoscale-group/aws"
version = "0.30.0"
name = "myproj"
image_id = data.aws_ami.amazon_linux_2.id
instance_type = "t2.small"
security_group_ids = [module.sg.id]
subnet_ids = module.subnets.public_subnet_ids
health_check_type = "EC2"
min_size = 1
desired_capacity = 1
max_size = 1
wait_for_capacity_timeout = "5m"
associate_public_ip_address = true
user_data_base64 = base64encode(templatefile("${path.module}/user_data.tpl", { cluster_name = aws_ecs_cluster.default.name }))
key_name = module.ssh_key_pair.key_name
# Auto-scaling policies and CloudWatch metric alarms
autoscaling_policies_enabled = true
cpu_utilization_high_threshold_percent = "70"
cpu_utilization_low_threshold_percent = "20"
}user_data.tpl文件如下所示:
#!/bin/bash
echo ECS_CLUSTER=${cluster_name} >> /etc/ecs/ecs.config
# Set up crontab file
echo "MAILTO=webmaster@myproj.com" >> /var/spool/cron/ec2-user
echo " " >> /var/spool/cron/ec2-user
echo "# Clean docker files once a week" >> /var/spool/cron/ec2-user
echo "0 0 * * 0 /usr/bin/docker system prune -f" >> /var/spool/cron/ec2-user
echo " " >> /var/spool/cron/ec2-user
start ecs实例是生成的,当我第一次使用DNS名称将SSH放入派生实例中时,我可以成功地连接。( SSH服务器在第一次连接时返回一个主机密钥,与实例的控制台输出中列出的相同。在批准后,主机密钥将添加到~/.ssh/known_hosts中。)
但是,尽管在创建自动示波器组时创建了一个ssh_key_pair并指定了密钥对的key_name,但我仍然无法成功地登录到生成的实例。(我已经检查过了,并且使用预期的名称在AWS控制台中存在密钥对。)当我在命令行上使用SSH,指定创建的密钥对的私钥一半时,上面的握手成功,但是连接最终失败:
debug1:不再尝试身份验证方法。ec2-user@myhost.us-east-2.compute.amazonaws.com:许可被拒绝(公开密钥,gssapi,gssapi-with-mic).
当我使用AWS控制台中的Connect按钮并单击"SSH client“选项卡时,显示如下:
无关联密钥对
此实例不与密钥对关联。没有密钥对,就无法通过SSH连接到实例。
您可以使用仅使用有效用户名的EC2实例连接进行连接。如果已被授予必要的权限,则可以使用会话管理器进行连接。
我也不能使用EC2实例连接,它在以下方面失败:
连接到实例时出现了问题
登录失败。如果这个实例刚刚启动,请等待几分钟,然后再试一次。否则,确保该实例在支持EC2实例连接的AMI上运行。
我正在使用most_recent AMI和regex amzn2-ami-ecs-hvm.*x86_64-ebs,据我所知,它是与EC2实例连接一起预装的。
我是不是错过了user_data模板中的一个步骤?我还在某个地方读到了一些关于实例的角色可能会影响到这一点的内容,但是我想不出如何用这样自动生成的实例来配置它。
发布于 2022-05-02 02:08:38
你现在发布的内容,以及你之前的问题,都是正确的。您没有理由不能对实例进行ssh操作。您必须确保在ssh命令中使用myproj-ec2私有ssh键,例如:
ssh -i ./myproj-ec2 ec2-user@<instance-public-ip-address>而且,ec2-instance-connect没有安装在ECS优化的实例上。如果您想使用它,就必须手动安装它。
附注:我没有检查您的user_data或任何iam角色,因为它们与您的ssh问题无关。如果你对这些有异议,就应该提出新的问题。
https://stackoverflow.com/questions/72080035
复制相似问题