メニューを閉じる

テクノデジタルグループ

メニューを開く

2025.08.28

AWS

【AWS】SSMポートフォワーディングとInstance Connectを利用したプライベートEC2へのSSH接続手順

Instance Connectって?

EC2 Instance Connectは、SSH公開鍵を一時的にEC2インスタンスへ登録することで、安全かつ簡単にSSH接続するためのAWSのサービスです。

従来必要だった「SSHキーペア(秘密鍵)」を手元で永続的に管理する必要がなくなり、よりセキュアにインスタンスを運用できるのが大きな特徴です。

【参照】

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-instance-connect-methods.html

【この手順書で実行できること】

本来であればprivateサブネット内のEC2に接続するためにはEC2 Instance Connect Endpoint というVPC内の専用中継点を作成する必要がありますが、本手順では SSM Session Manager のポートフォワーディング機能 を利用してPCとEC2間の安全なトンネルを確立することで、EC2 Instance Connect Endpoint の作成を行わなくても接続が可能となります。

事前準備

ここではaws cliの設定(プロファイルの作成)を記載していますが、これができている場合は次の
【Instance Connect設定とポートフォワーディングによるSSH】
までスキップしてください。

1) AWS CLIのインストール

PowerShell、またはお手元のシェル実行環境でAWS CLIが実行できるようご準備ください。
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html

確認

aws --version

実行結果例:

aws-cli/2.15.38 Python/3.11.8 Windows/10 exe/AMD64 prompt/off

2) アクセスキーの用意

各自のアクセスキーを用意します。
マネジメントコンソールにログインの上、以下の手順で事前にアクセスキーをご用意ください。

[IAM] – [ユーザー] – [(自身のユーザー名)] – [セキュリティ認証情報] – [アクセスキー] – [アクセスキーを作成]

  • ユースケース:コマンドラインインターフェイス(CLI)
  • □上記のレコメンデーションを理解し、アクセスキーを作成します。
    →□にチェックを入れて[作成]

3) AWS configureでプロファイルを作成する

例)

aws configure --profile hogehoge-stg
AWS Access Key ID [None]: アクセスキーを入力
AWS Secret Access Key [None]: シークレットアクセスキーを入力
Default region name [None]: ap-northeast-1
Default output format [None]: json

4) 疎通確認

aws s3 ls --profile hogehoge-stg

S3バケットの一覧が返れば疎通はOKです。

【Instance Connect設定とポートフォワーディングによるSSH】

1) sshキー作成(作成済みのものでもよい)

※ここではhogehoge-stgという名前で作成します

ssh-keygen -t rsa -b 4096 -f ~/.ssh/hogehoge-stg

これで秘密鍵 hogehoge-stg と公開鍵 hogehoge-stg.pub が作成されます。

2) 対象サーバに一時的なssh公開鍵を配置する

コマンド

aws ec2-instance-connect send-ssh-public-key \
    --region <リージョン> \
    --instance-id <インスタンスID> \
    --instance-os-user <OSユーザー名> \
    --ssh-public-key file://<公開鍵ファイルのパス> \
    --profile <プロファイル名>

実行例

aws ec2-instance-connect send-ssh-public-key \
    --region ap-northeast-1 \
    --instance-id i-0xxxxxxxxxxxxxxxx \
    --instance-os-user ec2-user \
    --ssh-public-key file://~/.ssh/hogehoge-stg.pub \
    --profile hogehoge-stg

成功時のレスポンス

{
    "RequestId": "xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx",
    "Success": true
}

これで、認証用の一時的な公開鍵がEC2に登録されました。

※注意:登録された公開鍵は60秒で失効します。以降の手順は60秒以内に実行してください。

3) EC2サーバとトンネル接続

コマンド

aws ssm start-session \
    --target <インスタンスID> \
    --document-name AWS-StartPortForwardingSession \
    --parameters '{"portNumber":["22"],"localPortNumber":["10022"]}' \
    --profile <プロファイル名>

実行例

aws ssm start-session \
    --target i-0xxxxxxxxxxxxxxxx \
    --document-name AWS-StartPortForwardingSession \
    --parameters '{"portNumber":["22"],"localPortNumber":["10022"]}' \
    --profile hogehoge-stg

成功時のレスポンス

Starting session with SessionId: your-session-id
Port 10022 opened for sessionId your-session-id.
Waiting for connections...

この状態になればトンネルが確立しています。
このターミナルは起動したままにして、SSHコマンドは別の新しいターミナルで実行してください。

4) SSHコマンド実行

新しいターミナルを開き、以下のコマンドを実行します。

■ sshの例

ssh -p 10022 -i ~/.ssh/hogehoge-stg ec2-user@127.0.0.1

■ scpの例

scp -P 10022 -i ~/.ssh/hogehoge-stg test.txt ec2-user@127.0.0.1:/tmp/

※上記の情報(秘密鍵の配置場所)があればWinSCPによる接続も可能です。その場合、以下の設定で接続してください。

  • 転送プロトコル: SCP
  • ホスト名: 127.0.0.1
  • ポート番号: 10022
  • ユーザー名: ec2-user
  • 認証: [設定] > [SSH] > [認証] を開き、作成した秘密鍵(例: ~/.ssh/hogehoge-stg)を選択します。

【記事への感想募集中!】

記事への感想・ご意見がありましたら、ぜひフォームからご投稿ください!
  • こんな記事が読んでみたい、こんなことが知りたい、調べてほしい!という意見も募集中!
  • いただいた感想は今後の記事に活かしたいと思います!

感想フォームはこちら


【テクノデジタルではエンジニア/デザイナーを積極採用中です!】

下記項目に1つでも当てはまる方は是非、詳細ページへ!
  • 自分でアプリを作ってみたい
  • ITで世の中にワクワクを生み出したい
  • 使いやすさ、デザインにこだわったWebサイトを開発したい

採用情報の詳細はこちら


Qangaroo(カンガルー)

  • 徹底した見やすさと優れた操作性で、テストの「見える化」を実現。
  • テストの進捗が見える。開発がスマートに進む。
  • クラウド型テスト管理ツール『Qangaroo(カンガルー)』

【テクノデジタルのインフラサービス】

当社では、多数のサービスの開発実績を活かし、
アプリケーションのパフォーマンスを最大限に引き出すインフラ設計・構築を行います。
AWSなどへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。

https://www.tcdigital.jp/infrastructure/

最近の記事