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是一对

相关推荐
吳所畏惧1 天前
宝塔面板Redis密码修改指南:SSH命令修改 vs 面板UI界面修改,哪个更靠谱?
运维·服务器·数据库·redis·缓存·ssh
Geek-Chow1 天前
ALB SSL policy conflict (AWS Load Balancer Controller)
网络协议·ssl·aws
xuefeiniao1 天前
CentOS + 宝塔服务器偶发 SSH、面板、网站全部无法访问排查记录(PHP-FPM 内存耗尽案例)
服务器·centos·ssh·php
weixin_457340211 天前
ssh 本地链接服务器地址和服务器查看本地地址
运维·服务器·ssh
大侠锅锅2 天前
第 19 篇:远程运维体系——指标、SSH、日志与 OTA 升级
运维·ssh
2601_955759722 天前
AWS 账号能转成企业账号吗?NiceCloud 把变更要点说清楚
云计算·aws
2601_955759882 天前
AWS 一个邮箱能注册几个账号?NiceCloud 说明管理规则
云计算·aws
曾阿伦2 天前
Windows 下运行 Hadoop 并部署到 AWS EMR 指南
hadoop·windows·aws
故乡de云3 天前
AWS 绑卡失败排查全流程:预授权、3D Secure 与账单信息不一致的完整定位方法
云计算·aws
故乡de云3 天前
AWS 更换信用卡完整教程:绑定新卡、切换默认支付方式与扣款失败排查
云计算·aws