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

相关推荐
kernelcraft5 小时前
Boto3:Python 操作 AWS 的官方 SDK
开发语言·python·其他·aws
CriticalThinking8 小时前
在xshell中使用ssh隧道访问远程服务
linux·网络·ssh
m0_6932006515 小时前
VSCode使用ssh remote插件远程连接linux主机
linux·vscode·ssh
aosky1 天前
一台电脑配置多个 SSH Key 对应不同的 GitHub 账号
运维·ssh·github
Jurio.1 天前
tmux 安装与使用教程:SSH 断开后任务继续运行,终端分屏与多窗口管理
linux·经验分享·ssh·tmux
麦麦麦当劳大王1 天前
Linux SSH服务端配置指南
linux·运维·服务器·ssh
zh路西法2 天前
【SSH 免密登录全流程】Windows Linux 通用方案
linux·windows·ssh
高旭的旭2 天前
反向 SSH 隧道远程方案
运维·ssh
ICT系统集成阿祥3 天前
SSH连接交换机慢的原因&优化方案
运维·服务器·ssh