LoginSignup
5
3

More than 3 years have passed since last update.

awsのec2に踏み台経由でssh接続するためのconfigの作成

Last updated at Posted at 2019-05-10

はじめに

aws上のec2が複数存在する場合には踏み台となるサーバのみにグローバルIPを設定して、他は踏み台経由でログインするようにしているところが多いかと思います。

その際に、サーバがたくさんあるとローカルIPを調べたりするのが大変です。
なので、aws-cliを使って一気に config ファイルを作成することができたので共有します。

環境

  • OS ubuntu 18.04(Windows10 WSL上)
  • SSHのバージョン OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017

前提

  • aws-cliインストールと設定済み
  • 踏み台サーバ用の秘密鍵ファイルとその他のサーバ用の秘密鍵ファイルを作成済み。(ログインできるところまで確認済みのほうがよい)
  • jqをインストールしてあること。

ファイルの作成

(注意)作成するファイルのモードはすべて600です。(ディレクトリは700)
この後作成するファイルも同様です。

.ssh/config作成

configファイルでIncludeが利用できるようになったので、まずはデフォルトのみのconfigファイルを作成します。
configファイルの設定は後勝ちなので大事なことは最後に記述しましょう。

.ssh/config
Include conf.d/*

Host *
  ServerAliveInterval 300
  AddKeysToAgent yes
  StrictHostKeyChecking no

同時に.ssh/conf.dのディレクトリも作成します。

踏み台用のconfigファイル作成

以下のように作成します。一行目以外は自分の環境に合わせて変更してください。

.ssh/conf.d/bastion.conf
Host bastion
  HostName bastion.hogehoge.com
  User bastion
  IdentityFile ~/.ssh/bastion.pem

できたら接続確認をしましょう。

$ sh bastion
Last login: xxx from xxx.xxx.xxx.xxx

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/xxxx.xx-release-notes/
$ 

無事にログインできたら、各サーバの設定を行います。

いったんひとつのサーバへの接続確認

awsのコンソールでインスタンス名とプライベートIPを確認して以下のようなファイルを作成します。

.ssh/conf.d/test1.conf
Host aws_test1
  HostName xxx.xxx.xxx.xxx
  User ec2-user
  IdentityFile ~/.ssh/ec2-user.pem
  ProxyCommand ssh -W %h:%p bastion

ポイントはProxyCommandですね。

ファイルを作成したら、ログインできるか確認してみましょう。

共通部分の切り出し

先ほどの設定でうまく接続できたら、共通部分を切り出します。

.ssh/conf.d/aws_common.conf
Host aws_*
  User ec2-user
  IdentityFile ~/.ssh/ec2-user.pem
  ProxyCommand ssh -W %h:%p bastion

Hostの指定は共通の接頭辞(今回はaws_)を付けてください。

各インスタンスごとの設定ファイル作成

ここが今回のポイントです。

以下のコマンドですべてのインスタンスに対する設定ファイルができます。

aws ec2 describe-instances | jq -r '.Reservations[].Instances[] | "Host aws_" + .Tags[].Value + "\n HostName " + .PrivateIpAddress + "\n"' > ~/.ssh/conf.d/aws_all.conf

ファイルを作成したら、ログインできるか試してみましょう。

Windows10の場合

Windows10にも標準でOpenSSHが入っています。(最近知りました。もう*termとかいらないですね。)

C:\Users\ユーザ名.ssh にファイルを作成すれば同様のことが可能です。
ただし、以下の2点に注意する必要があります。

  • jqをインストールしたりが面倒 → なので、WSLを利用するほうが楽かと思います。
  • ProxyCommand sshがエラーになるため、ProxyCommand C:\Windows\System32\OpenSSH\ssh.exeと書きましょう。

終わりに

いい感じのconfigファイルができたら社内で共有しておくとありがたがられるかと思います。
aws-cliとjqの組み合わせはかなり強力なので、どんどん活用しましょう!!

参考

5
3
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
5
3