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

相关推荐
lingran__19 小时前
Git 完全指南(三):远程仓库与标签管理
开发语言·git·gitee·ssh·团队协作·远程仓库·分布式版本控制
Tassel_YUE19 小时前
非 ansible 主机批量执行命令方法:psssh 和 pscp(随手记)
linux·网络·ssh·scp·ansible
JZZC22 天前
1.1 基础的SSH配置
计算机网络·ssh
GreatVicent2 天前
AI Agent互操作标准化加速:A2A协议正式加入Linux基金会
linux·运维·人工智能·agent·aws·a2a
Akiyama_Mio-Kon3 天前
AWS AI 自动安全修复深度解读:从生成脚本到最小权限、双人审批与回滚审计闭环
aws·ai agent·security hub·guardduty·安全自动化·云安全治理
深念Y3 天前
Windows 11 工具链部署与 SSH 踩坑笔记
windows·笔记·ssh
mooooooooooye4 天前
2026 年跨平台 SSH 客户端怎么选?Xterminal、Termius、MobaXterm 谁更合适
服务器·网络·ssh
小王C语言5 天前
Windows 无法使用 ssh 连接虚拟机(ubuntu),网络没问题的情况下
运维·ssh
Akiyama_Mio-Kon6 天前
Claude Code 修复凭据文件云上传:给 AI 编程工具补一张“工作区出境”门禁
devsecops·terraform·ai 编程·claude code·凭据安全·ai agent 安全·云会话
2501_930472446 天前
实战-腾讯云AI助手逆向导出Terraform-存量资源代码化
人工智能·腾讯云·terraform