3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

初学者向け:Tera Termを使って、EC2インスタンスに.pemファイルを使いSSH接続する方法

Last updated at Posted at 2024-12-15

はじめに

この記事では、Windows環境で利用できるTera Termを使用し、AWS環境のEC2インスタンスにSSH接続して簡単な操作を行う手順を解説します。

特に、.pemファイルを用いたSSH接続の方法に焦点を当てます。

今回のAWSインフラ環境の構築には、IaC(Infrastructure as Code)の代表的なツールであるTerraformを使用しています。

「Tera Term」と「Terraform」という、似た名前のツールが登場しますが、混乱しないようご注意ください!

(余談ですが、CloudFormationを使うべきだったかもしれません…笑)

Tera Termとは

Tera Term(テラターム)は、Windowsユーザー向けの端末エミュレーターです。

スクリーンショット 2024-12-15 0.32.10.png

引用画像:https://www.miraiserver.ne.jp/column/about_ssh/

SSH(Secure Shell)を利用して、リモートサーバーに安全に接続する際に広く使われています。

基本的なTera Termの使い方については、上記の記事で詳しく解説していますので、必要に応じて参考にしてください。

pemファイル(秘密鍵)とは

.pemファイルは、AWS EC2インスタンスにSSH接続する際に使用する秘密鍵ファイルです。

スクリーンショット 2024-12-15 9.24.44.png
引用画像:https://zenn.dev/goldsaya/articles/39877e2cf11d4e

このファイルはインスタンス作成時に生成され、安全な接続を保証するために非常に重要な役割を果たします。

詳しい解説は、以下の記事が参考になりましたので、ご紹介いたします。

EC2インスタンスを作成する際に生成され、インスタンスへの安全な接続を保証します。

【注意事項】
.pemファイルは非常に重要なファイルです。

  • 紛失するとインスタンスにアクセスできなくなる恐れがあります。
  • AWSからダウンロードした秘密鍵は適切に保管し、第三者に絶対に共有しないでください。
  • ローカル環境で使用する際は、ファイル権限を厳しく制限(例: 400に設定)することを推奨します!

何度も繰り返しますが、このファイルは極めて重要です。取り扱いや保管には十分注意してください!

前提条件

この記事では、以下の条件を前提として進めます。

  • EC2インスタンスが構築済みであること
    過去の記事でシングルAZ構成として構築したEC2インスタンスを使用します。

  • インスタンスの配置場所
    EC2インスタンスはパブリックサブネットに配置され、直接SSH接続が可能な状態になっています。

  • .pemファイル(秘密鍵)が手元にあること
    EC2インスタンス作成時にダウンロードした.pemファイルを使用します。このファイルがない場合はインスタンスに接続できません。

  • 接続先ユーザー
    接続先のデフォルトユーザー名は「ec2-user」を想定しています。

AWSのインフラ環境については、この後、コードを使用してスマートに構築していきます!!

また、Tera Termのインストール方法については、過去の記事をご参照ください。

インフラ環境構築

AWSのインフラ環境構築は、シンプルなシングルAZ構成をTerraformを使って作成しています。

補足として、以下のコードを流用する際には、事前に.pemファイルを作成しておく必要があります。

main.tf
provider "aws" {
  region = "ap-northeast-1" # Tokyo region
}

# VPC作成
resource "aws_vpc" "main_vpc" {
  cidr_block           = "10.0.0.0/16"
  enable_dns_support   = true
  enable_dns_hostnames = true

  tags = {
    Name = "terraform-main-vpc"
  }
}

# サブネット作成 (パブリックサブネット)
resource "aws_subnet" "public_subnet" {
  vpc_id                  = aws_vpc.main_vpc.id
  cidr_block              = "10.0.1.0/24"
  map_public_ip_on_launch = true

  tags = {
    Name = "terraform-public-subnet"
  }
}

# インターネットゲートウェイ作成
resource "aws_internet_gateway" "main_igw" {
  vpc_id = aws_vpc.main_vpc.id

  tags = {
    Name = "terraform-main-igw"
  }
}

# ルートテーブル作成
resource "aws_route_table" "public_route_table" {
  vpc_id = aws_vpc.main_vpc.id

  route {
    cidr_block = "0.0.0.0/0"
    gateway_id = aws_internet_gateway.main_igw.id
  }

  tags = {
    Name = "terraform-public-route-table"
  }
}

# サブネットとルートテーブルの関連付け
resource "aws_route_table_association" "public_association" {
  subnet_id      = aws_subnet.public_subnet.id
  route_table_id = aws_route_table.public_route_table.id
}

# セキュリティグループ作成
resource "aws_security_group" "public_sg" {
  vpc_id = aws_vpc.main_vpc.id

  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"] # HTTPアクセスを許可
  }

  ingress {
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"] # SSHアクセスを許可
  }

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"] # すべてのアウトバウンドを許可
  }

  tags = {
    Name = "terraform-public-sg"
  }
}

# EC2インスタンス作成
resource "aws_instance" "apache_ec2" {
  ami                         = "ami-0b6fe957a0eb4c1b9" # Amazon Linux 2 AMI (Tokyo region)
  instance_type               = "t2.micro"
  subnet_id                   = aws_subnet.public_subnet.id
  security_groups             = [aws_security_group.public_sg.id] # 修正: IDを参照
  associate_public_ip_address = true # パブリックIPv4アドレスを有効化
  key_name                    = "honda" # 修正: キーペア名を指定

  user_data = <<-EOF
    #!/bin/bash
    yum update -y
    yum install -y httpd
    systemctl start httpd
    systemctl enable httpd
    echo "<html><body><h1>Welcome to Apache Server powered by Terraform!</h1></body></html>" > /var/www/html/index.html
  EOF

  depends_on = [aws_security_group.public_sg] # 修正: セキュリティグループに依存

  tags = {
    Name = "terraform-apache-ec2"
  }
}

過去の記事のTerraformコードを流用し、一部キーペア名を指定して追加しています。

EC2インスタンスにSSH接続してみた

まず、上記のコードで作成したEC2インスタンスのパブリックIPアドレスを確認します(例: 43.207.168.228)。

スクリーンショット 2024-12-15 8.42.01.png

Tera Termを起動すると、接続画面が表示されます。ここで「ホスト」欄に、先ほど確認したパブリックIPアドレスを入力します。

スクリーンショット 2024-12-15 9.54.28.png

初回接続時に表示される確認画面が出た場合、そのまま「続行」をクリックして進んでください。

スクリーンショット 2024-12-15 8.51.53.png

次に、接続画面で「OK」を押すと、SSH認証のウィンドウが表示されます。ここで、ユーザー名として「ec2-user」を入力します。

スクリーンショット 2024-12-15 8.54.18.png

「RSA/DSA/ECDSA/ED25519 鍵を使用する」にチェックを入れ、.pemファイルを指定します。

「OK」をクリックすると、接続が開始されます。接続が成功すれば、Tera Termのウィンドウ上にリモートサーバーのコマンドラインが表示されます。

スクリーンショット 2024-12-15 8.55.17.png

コマンドを使い、Hello worldしてみた

SSH接続が完了したら、以下のコマンドを実行して「Hello world」を表示します。

echo "Hello world"

実行後、次のように表示されれば、今回の技術検証は完了です。

スクリーンショット 2024-12-15 8.57.13.png

まとめ

ここまでお読みいただき、ありがとうございました!予想以上にTerraformのコード化部分でエラーが発生し、少し時間がかかってしまいました(笑)。

今回は、主にWindowsユーザー向けの内容でしたが、サーバーへのSSH接続はサーバー構築や管理における第一歩です。

この記事が、SSH接続の基本やTera Termの使い方を理解する手助けとなれば幸いです!

おまけ:Macユーザーの場合のSSH接続について

Macではターミナルを使用して、ssh コマンドで簡単にEC2インスタンスへ接続できます。以下に基本的な手順を示します。

ターミナルを開き、秘密鍵(.pemファイル)が保存されているディレクトリに移動します。

必要に応じて、次のコマンドでファイルの権限を変更します。

chmod 400 your-key.pem

次のコマンドを実行して接続することで、GUIは不要で、シンプルに操作できます。

ssh -i your-key.pem ec2-user@インスタンスのパブリックIPアドレス

関連記事

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?