Help us understand the problem. What is going on with this article?

EC2のパブリックIPアドレスを意識せずにSSHログインする

やりたいこと

踏み台サーバーを構築した際などは、基本的にSSHでログインすることになる。
そのEC2のパブリックIPアドレスを知らない状態で、SSHログインをしたい。

EC2を起動する度にパブリックIPアドレスは切り替わるので、ElasticIPを付与するケースが多かったりする。
しかし、ElasticIPは1AWSアカウントに対し、デフォルトではリージョン毎に5つしか設定できなかったりと何かと制約がある。
そのため、不必要にElasticIPを使うのも避けたい。

解決策

下記の流れで解決できます。

  1. (事前準備) EC2インスタンスにタグを貼っておく
  2. (SSH接続時) SSH接続したいインスタンスのオブジェクトをタグで検索をかける
  3. (SSH接続時) ヒットしたEC2のパブリックIPアドレスを取得
  4. (SSH接続時) 取得したパブリックIPアドレスに対し、SSH接続

インスタンスへのタグ付

下記のように、Nameというキー名でタグを貼ると、コンソール画面のNameの場所にタグの値が表示されます。
スクリーンショット 2019-11-26 15.57.14.png

今回は、Nameというタグをvrf-bastionという名前で貼りました。

SSH接続

AWS CLIを使ったスクリプトを書きます。
インスタンス情報を取得するには、 aws ec2 describe-instances を使用します。
追加で指定するオプションは下記の通りです。

  • --filters : 指定したインスタンス情報で検索するインスタンスを絞り込む
  • --query : 取得したインスタンス情報から、抽出するフィールドを指定する

作成したスクリプト

ssh-ec2.sh
#!/bin/bash

# ------------------------------------------
# 踏み台サーバーにSSHログイン
#
# 実行例:
#   $ sh ssh-ec2.sh
# ------------------------------------------

KEY_PATH_LOCAL=~/.ssh/key-pair.pem

PUBLIC_IP=$(
    aws ec2 describe-instances \
        --filters \
            "Name=tag:Name,Values=vrf-bastion" \
            "Name=instance-state-name,Values=running" \
        --query "Reservations[0].Instances[0].PublicIpAddress" \
    | tr -d \"
)
ssh -i ${KEY_PATH_LOCAL} ec2-user@${PUBLIC_IP}

--filters では、タグのName属性がvrf-bastionであるものを指定しており、さらに起動中のインスタンスの指定をしています。
検索に引っかかったインスタンスが1つであっても、リスト形式で情報が帰ってくるので --queryに、Instance[0]という形で先頭のインスタンスを取得し、パブリックIPアドレスのみを出力するよう指定しています。

また、 "aaa.bbb.ccc.ddd" というダブルクオーテーション付きでパブリックIPが出力されるので、最後に両サイドのダブルクオーテーションを取り除いて変数に代入。

最後にそれらの変数を用い、SSH接続。

あとは、下記のようスクリプトを実行するだけです。

$ sh ssh-ec2.sh

これで動的にインスタンス名からIPアドレスを取得し、SSH接続できるようになりました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away