はじめに
この記事では、Windows環境で利用できるTera Termを使用し、AWS環境のEC2インスタンスにSSH接続して簡単な操作を行う手順を解説します。
特に、.pemファイルを用いたSSH接続の方法に焦点を当てます。
今回のAWSインフラ環境の構築には、IaC(Infrastructure as Code)の代表的なツールであるTerraformを使用しています。
「Tera Term」と「Terraform」という、似た名前のツールが登場しますが、混乱しないようご注意ください!
(余談ですが、CloudFormationを使うべきだったかもしれません…笑)
Tera Termとは
Tera Term(テラターム)は、Windowsユーザー向けの端末エミュレーターです。
引用画像:https://www.miraiserver.ne.jp/column/about_ssh/
SSH(Secure Shell)を利用して、リモートサーバーに安全に接続する際に広く使われています。
基本的なTera Termの使い方については、上記の記事で詳しく解説していますので、必要に応じて参考にしてください。
pemファイル(秘密鍵)とは
.pemファイルは、AWS EC2インスタンスにSSH接続する際に使用する秘密鍵ファイルです。
引用画像: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ファイルを作成しておく必要があります。
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
)。
Tera Termを起動すると、接続画面が表示されます。ここで「ホスト」欄に、先ほど確認したパブリックIPアドレスを入力します。
初回接続時に表示される確認画面が出た場合、そのまま「続行」をクリックして進んでください。
次に、接続画面で「OK」を押すと、SSH認証のウィンドウが表示されます。ここで、ユーザー名として「ec2-user」を入力します。
「RSA/DSA/ECDSA/ED25519 鍵を使用する」にチェックを入れ、.pemファイルを指定します。
「OK」をクリックすると、接続が開始されます。接続が成功すれば、Tera Termのウィンドウ上にリモートサーバーのコマンドラインが表示されます。
コマンドを使い、Hello worldしてみた
SSH接続が完了したら、以下のコマンドを実行して「Hello world」を表示します。
echo "Hello world"
実行後、次のように表示されれば、今回の技術検証は完了です。
まとめ
ここまでお読みいただき、ありがとうございました!予想以上に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アドレス
関連記事