EC2へのSSH接続を~/.ssh/config
で効率化する備忘録
AWS Session Managerは便利ですが、利用状況によってはコストが気になる場合があります。コストを抑えつつ、ローカル環境からEC2インスタンスへ手軽にSSH接続するための設定方法を、備忘録としてまとめます。~/.ssh/config
ファイルを利用することで、接続コマンドを簡略化し、管理を容易にすることが目的です。
前提条件
-
EC2インスタンスにElastic IPアドレスが付与されていること:
-
趣旨: Elastic IPアドレス(固定パブリックIPアドレス)をインスタンスに関連付けることで、インスタンスを停止・起動してもIPアドレスが変更されなくなり、
~/.ssh/config
に記述するHostName
を固定できます。これにより、安定した接続設定を維持できます。必須ではありませんが、設定しておくことを強く推奨します。
-
趣旨: Elastic IPアドレス(固定パブリックIPアドレス)をインスタンスに関連付けることで、インスタンスを停止・起動してもIPアドレスが変更されなくなり、
-
キーペア(.pemファイル)のパーミッションが正しく設定されていること:
- 趣旨: SSHクライアントは、秘密鍵ファイルが第三者から読み取られないよう、厳格なパーミッションを要求します。セキュリティ上の重要な要件であり、所有者のみが読み取り可能である必要があります。
-
設定コマンド例:
chmod 400 /path/to/your-key.pem
- 根拠: SSHプロトコルのセキュリティ要件に基づき、秘密鍵の漏洩を防ぐため。
1. SSHディレクトリの作成とパーミッション設定
SSH設定ファイルを格納する ~/.ssh
ディレクトリを作成し、適切なパーミッションを設定します。
# ~/.ssh ディレクトリが存在しない場合に作成 (-p オプション)
mkdir -p ~/.ssh
# ディレクトリのパーミッションを所有者のみ読み書き実行可能 (700) に設定
chmod 700 ~/.ssh
-
趣旨:
~/.ssh
ディレクトリと内部のファイルは、セキュリティ上、所有者以外からアクセスできないように保護する必要があります。700
は、所有者にのみ全ての権限を与え、他人には一切の権限を与えない設定です。
2. ~/.ssh/config
ファイルの設定
~/.ssh
ディレクトリ内に config
ファイルを作成(または編集)し、接続情報を記述します。
vim ~/.ssh/config
以下のように設定を記述します。
# 接続設定ブロックの開始 (Host には任意の接続名を指定)
Host xxxxxx-server
# 接続先EC2インスタンスのパブリックIPアドレスまたはDNS名
HostName <EC2インスタンスのパブリックIPアドレスまたはDNS名>
# 接続ユーザー (AMIによって異なる場合がある)
User ec2-user
# 使用するキーペアファイル (.pem) のフルパス
IdentityFile <キーペアファイル(.pem)のフルパス>
# (オプション) 接続維持設定
# 60秒ごとにサーバーに生存確認パケットを送信
ServerAliveInterval 60
# 3回応答がない場合に接続を切断
ServerAliveCountMax 3
【設定例】
Host app-server
HostName 123.45.67.89
User ec2-user
IdentityFile /Users/hoge/.ssh/app-key.pem
ServerAliveInterval 60
ServerAliveCountMax 3
-
趣旨:
config
ファイルを利用することで、ssh
コマンド実行時にIPアドレス、ユーザー名、キーファイルのパスなどを毎回指定する必要がなくなり、Host
で指定した名前(ニックネーム)だけで簡単に接続できるようになります。 -
注意:
User
は、Amazon Linux 2の場合はec2-user
が一般的ですが、Ubuntuの場合はubuntu
など、使用するAMIによって異なりますので、適宜変更してください。 - 接続維持オプション: 長時間操作がない場合にSSH接続がタイムアウトで切断されるのを防ぐために設定します。
3. SSH接続の実行
config
ファイルに設定した Host
名を使ってSSH接続を行います。
ssh <任意の接続名>
【実行例】
ssh app-server
成功すると、以下のようにサーバーにログインできます。
A newer release of "Amazon Linux" is available.
Version 2023.7.20250512:
Run "/usr/bin/dnf check-release-update" for full release and version update info
, #_
~\_ ####_ Amazon Linux 2023
~~ \_#####\
~~ \###|
~~ \#/ ___ https://aws.amazon.com/linux/amazon-linux-2023
~~ V~' '->
~~~ /
~~._. _/
_/ _/
_/m/'
[ec2-user@ip-xxx-xx-xx-xx ~]$
以上で、~/.ssh/config
を利用した効率的なSSH接続設定は完了です。
補足:セキュリティグループ
この方法でSSH接続を行うには、EC2インスタンスにアタッチされているセキュリティグループで、SSH(TCPポート22)のインバウンド通信が許可されている必要があります。セキュリティを確保するため、接続元のIPアドレス(ご自身のローカル環境のグローバルIPアドレス)のみからのアクセスを許可するように、セキュリティグループのルールを設定することを忘れずに。