如何通过SSH公钥登录Terraform创建的AWS EC2实例?
如何通过SSH公钥登录Terraform创建的AWS EC2实例?
嘿,我来一步步教你搞定这个事儿,全程都是实操步骤,不搞虚的:
第一步:先准备好你的SSH密钥对
要是你本地还没生成SSH密钥对,先在终端跑这个命令:
ssh-keygen -t rsa -b 4096
按提示一路回车就行,生成后找到你的公钥文件(默认是~/.ssh/id_rsa.pub),把里面的内容全复制下来,后面要用到。
第二步:编写完整的Terraform配置
下面是能直接用的配置,我已经补全了你之前截断的部分,记得把你刚才复制的公钥内容替换到public_key字段里:
resource "aws_security_group" "ec2_sg" { name = "ec2-access" vpc_id = aws_vpc.main.id ingress { from_port = 22 to_port = 22 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] # 划重点:生产环境别用这个!换成你自己的公网IP段才安全 } egress { from_port = 0 to_port = 0 protocol = "-1" cidr_blocks = ["0.0.0.0/0"] # 允许所有出站流量,按需调整就行 } } resource "aws_key_pair" "ssh-key" { key_name = "ssh-key" public_key = "ssh-rsa AAAAB3NzaC1..." # 这里替换成你自己的公钥内容 } # 部署在公共子网的EC2实例 resource "aws_instance" "ec2" { ami = "ami-04b70fa74e45c3917" # Ubuntu 24.04 LTS Noble Numbat instance_type = "t2.micro" subnet_id = aws_subnet.public.id security_groups = [aws_security_group.ec2_sg.id] associate_public_ip_address = true key_name = aws_key_pair.ssh-key.key_name # 关联我们创建的SSH密钥对 }
这里几个关键地方要留意:
- 安全组开了22端口,这是SSH登录的基础;
aws_key_pair会把你的公钥上传到AWS,EC2实例启动时会自动把这个公钥加到~/.ssh/authorized_keys里;- EC2通过
key_name关联密钥对,这样才能用对应的私钥登录。
第三步:应用Terraform配置
在配置文件所在的目录,依次执行这几个命令:
# 初始化Terraform环境 terraform init # 检查配置有没有问题 terraform plan # 确认无误后创建资源,输入yes确认 terraform apply
等个几分钟,资源就创建好了。
第四步:SSH登录EC2实例
资源创建完成后,你会看到EC2的公网IP(也可以去AWS控制台找),然后用下面的命令登录:
# 替换成你的私钥路径和EC2公网IP ssh -i ~/.ssh/id_rsa ubuntu@<你的EC2公网IP>
⚠️ 注意两个坑:
- 私钥权限必须设为
400,不然SSH会报错,执行chmod 400 ~/.ssh/id_rsa就行; - Ubuntu系统默认用户名是
ubuntu,要是用Amazon Linux系统,用户名得换成ec2-user。
额外提醒
生产环境里绝对不能把安全组的cidr_blocks设为0.0.0.0/0,改成你自己的公网IP段(比如192.168.1.1/32),这样只有你自己的IP能SSH访问,安全多了。
备注:内容来源于stack exchange,提问作者Yasserius
相关产品推荐
相关产品推荐

