Terraform: AWS VPC+可SSH登录EC2

Terraform AWS VPC+可SSH登录EC2完整Demo

这是上一章节纯VPC网络架构的实战验证版 ,在原有网络底座基础上新增了安全控制和计算资源,最终实现:一键部署完整VPC网络 + 一台可通过SSH密钥安全登录的公网EC2实例,用于验证整个网络架构的连通性。

一、核心升级点(对比纯VPC Demo)

原有组件 新增组件 核心作用
VPC/子网/IGW/NAT 安全组 实例级防火墙,开放22端口允许SSH登录
- SSH密钥对 替代密码登录,更安全的远程访问方式
- 公网EC2实例 部署在公网子网,自动获得公网IP,作为网络验证节点
- outputs.tf 自动输出实例公网IP等关键信息,方便连接

二、完整部署与验证流程

复制代码
生成本地SSH密钥 → Terraform初始化 → 部署所有资源 → 获取实例公网IP → SSH登录验证

三、关键新增文件说明

1. security.tf(安全组配置)

hcl 复制代码
# 创建允许SSH登录的安全组
resource "aws_security_group" "ssh_access" {
  name        = "ssh-access"
  description = "Allow SSH access from anywhere"
  vpc_id      = aws_vpc.main.id

  # 入站规则:允许所有IP访问22端口(SSH)
  ingress {
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  # 出站规则:允许所有流量外出
  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }

  tags = {
    Name = "ssh-access"
  }
}

注意 :生产环境不要用0.0.0.0/0,应限制为你的办公IP。

2. instance.tf(EC2实例配置)

hcl 复制代码
# 导入本地生成的SSH公钥到AWS
resource "aws_key_pair" "mykey" {
  key_name   = "mykey"
  public_key = file("${path.module}/mykey.pub")
}

# 在公网子网创建EC2实例
resource "aws_instance" "public_test" {
  ami           = "ami-0c55b159cbfafe1f0"  # Ubuntu 20.04 LTS (eu-west-1)
  instance_type = "t2.micro"               # 免费套餐可用
  key_name      = aws_key_pair.mykey.key_name
  subnet_id     = aws_subnet.main-public-1.id  # 部署在公网子网
  vpc_security_group_ids = [aws_security_group.ssh_access.id]  # 关联安全组

  tags = {
    Name = "public-test-instance"
  }
}

3. outputs.tf(输出关键信息)

hcl 复制代码
output "ec2_public_ip" {
  description = "EC2实例公网IP"
  value       = aws_instance.public_test.public_ip
}

四、精简执行步骤

  1. 生成SSH密钥对 (本地执行,生成私钥mykey和公钥mykey.pub

    bash 复制代码
    ssh-keygen -t rsa -b 2048 -f mykey -N ""
  2. 部署所有资源

    bash 复制代码
    terraform init   # 初始化项目
    terraform plan   # 预览资源
    terraform apply  # 确认部署
  3. SSH登录验证

    bash 复制代码
    # Linux/Mac:设置密钥文件权限(必须,否则SSH会报错)
    chmod 400 mykey
    
    # 连接实例(IP从terraform output获取)
    ssh -i mykey ubuntu@$(terraform output -raw ec2_public_ip)

五、验证成功标准

  • 执行ssh命令后能成功进入Ubuntu系统命令行
  • 在实例内执行ping 8.8.8.8能通(验证公网路由正常)
  • 在实例内执行curl ifconfig.me能返回实例公网IP

六、常见问题

  1. SSH连接被拒绝:检查安全组是否开放22端口,实例是否在公网子网
  2. 权限错误 :确保执行了chmod 400 mykey,私钥文件权限不能太开放
  3. 密钥不匹配 :确保本地私钥mykey和导入到AWS的公钥mykey.pub是一对

相关推荐
认真的薛薛8 小时前
Terraform:AWS VPC
云原生·aws·terraform
JiaWen技术圈8 小时前
使用 Terraform Grafana Provider 实现 Grafana 全栈 IaC 一体化管理的完整方案
云原生·grafana·terraform
yyuuuzz12 小时前
境外云服务器使用常见问题梳理
运维·服务器·网络·aws
JiaWen技术圈1 天前
IaC 双引擎:Terraform + Ansible 完整最佳实践
云原生·ansible·terraform
文滨1 天前
10分钟搞定!Mac 配置 GitHub SSH 完全指南(小白也能看懂)
前端·macos·ssh·github
鹏大师运维1 天前
不用装远程桌面!统信UOS通过SSH直接调用麒麟图形界面程序
linux·运维·网络·ssh·麒麟·x11·统信v25
十子木1 天前
SSH 反向端口转发 (Remote Port Forwarding)
运维·ssh
zhojiew2 天前
使用Redis Stream订阅HUATUO发布SSE内核可观测性事件并进行AI分析的数据管道实践
运维·hbase·aws
宠..2 天前
VS Code SSH 远程连接 Ubuntu 并实现快速运行(C/C++示例)
java·运维·c语言·开发语言·c++·ubuntu·ssh