はじめに
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ファイルの設定は後勝ちなので大事なことは最後に記述しましょう。
Include conf.d/*
Host *
ServerAliveInterval 300
AddKeysToAgent yes
StrictHostKeyChecking no
同時に.ssh/conf.dのディレクトリも作成します。
踏み台用のconfigファイル作成
以下のように作成します。一行目以外は自分の環境に合わせて変更してください。
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を確認して以下のようなファイルを作成します。
Host aws_test1
HostName xxx.xxx.xxx.xxx
User ec2-user
IdentityFile ~/.ssh/ec2-user.pem
ProxyCommand ssh -W %h:%p bastion
ポイントはProxyCommandですね。
ファイルを作成したら、ログインできるか確認してみましょう。
共通部分の切り出し
先ほどの設定でうまく接続できたら、共通部分を切り出します。
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の組み合わせはかなり強力なので、どんどん活用しましょう!!