1
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?

More than 1 year has passed since last update.

踏み台サーバ用の .ssh/config 自動生成

Last updated at Posted at 2023-04-06

はじめに

AWS で EC2 を複数立ち上げて、それらに踏み台サーバ (bastion サーバ) 経由でSSHログインすることはよくあることかと思います。その際、管理コンソールでプライベートIP調べてログインとか面倒ですよね。できれば名前でログインできたら便利ですが、そのための .ssh/config を管理コンソールから読み取って作るのも、それなりに面倒です。本記事では aws CLI を使って .ssh/config を生成する bash スクリプトをご紹介します。

前提

  • Linux 環境 (WSL2 とか) が利用可能であること
  • AWS CLI がインストールされていること
  • ec2:DescribeInstances の許可を受けた IAM を所有していること
  • EC2 に名前が設定されていること (タグのキーが Name、値にホスト名が設定されていること)
  • 踏み台サーバにログインユーザーの秘密鍵が、踏み台経由でログインしたいサーバにその公開鍵が配置されていること (そのような設定をした AMI からインスタンスを作成する必要がありますね)
  • jq コマンドがインストールされていること

生成スクリプト

以下が .ssh/config を自動生成する bash スクリプトです。

#!/bin/bash

aws ec2 describe-instances | \
    jq -r '.Reservations[].Instances[] | [(.Tags[] | select(.Key=="Name").Value), .PrivateIpAddress] | @csv' | \
    sort | \
    sed -e 's/"//g' | \
    awk -F, '{
        if (NF == 1) { next; }
        if ($2 == "") { next; }
        printf("Host %s\n", $1)
        printf("  HostName %s\n", $2)
        printf("  Port 22\n\n")
    }'

上記スクリプトではログインユーザーを指定していませんが、踏み台サーバにログインしているユーザと異なるユーザでログインする必要がある場合には HostName を設定している行の後に以下を追記するといいでしょう。

        printf("  User ユーザ名\n")

ユーザ名 の部分を適宜置き換えて下さい。

1
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
1
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?