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

AWS セッションマネージャでSSH接続する際、認識しやすい名称で接続したい

※環境はMac前提

AWS環境のサーバ(EC2インスタンス)に接続する際
セキュリティを考慮して セッションマネージャーでトンネルしてSSHしているケースあるかと思います。

Cf: AWS Systems Manager セッションマネージャーでSSH・SCPできるようになりました | Developers.IO

ただ、 ssh <インスタンスID> って、historyみたときに、あれ?このサーバなんだっけってなりますよね?

いつもどおり ssh production-server とかしたいわけで。その方法。

~/.ssh/config を以下のように設定。

Host awesome.production
    HostName i-0xxxxxxxxxxxxxxxx    # <- ここにインスタンスID入れる
# 以下、必要な数だけ 同じプリフィックスつけて HostNameを定義する

Host awesome.* 
    ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"

これで ssh awesome-production で接続できます。

ホスト名を動的に解決したい

ただ、上の方法だと、EC2インスタンスが増減したときに ~/.ssh/config
手動でメンテしなければならず、すこぶる面倒ですよね。

EC2のNameタグを利用してアクセスできるようにするには、以下のように ProxyCommand で少し頑張ってみる。

※ EC2のNameタグに設定する名前には、ピリオド「.」が入っていない前提。そうでない場合は $(echo %h | cut -d. -f2) の箇所をよしなに修正してください
※ Mac Catalina バージョン10.15.3, シェルはzshで確認

ProxyCommand $(EC2HOST=$(echo %h | cut -d. -f2);INSTANCEID=$(aws ec2 describe-instances --filters "Name=tag:Name,Values=$EC2HOST" --query "Reservations[*].Instances[*].[InstanceId]" --output text);echo aws ssm start-session --target $INSTANCEID --document-name AWS-StartSSHSession --parameters 'portNumber=%p')

DBクライアントソフトの対応

MySQLWorkbenchや DataGrip など、DBクライアントソフトでSSHトンネルする場合
~/.ssh/config を考慮してくれるようなのですが(ProxyCommandも考慮してくれる)
ProxyCommand 内のコマンド展開 $(echo %h | cut -d. -f2) などは考慮してくれないようです。
また、~/.ssh/config は Includeキーワードで別ファイルを読めるのですが、これも考慮してくれないようです。
なので、DBクライアントのトンネリングには、踏み台となる特定インスタンスを ~/.ssh/config に定義しておくしかなさそうです。

Host bastion
    HostName i-01xxxxxxxxxxxxxxx    # <- bastionのインスタンスID
    ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"

で、DBクライアントソフトのSSHホスト名を上で定義した「bastion」にすればOK。

※ DBクライアントによっては、session-manager-plugin をデフォルトでインストールしたときのパス /usr/local/bin が 環境変数 PATH に入って無くて読めないことがあるもよう。
その場合は、ProxyCommand にて PATHを設定するとうまくいく。

ProxyCommand sh -c "env PATH=/usr/local/bin:$PATH aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"

※ すべてにDBクライアントソフトを動作検証したわけではないので、これで繋がらない場合は
先に記述したDeveloper.IOの記事にあるポートフォワードを試してみてください。

m_norii
最近触っているのは、 AWS, PHP, Laravel, MySQL, BigQuery
https://norii.hatenablog.com/
openlogi
物流はこれから、テクノロジーによりダイナミックに変化する業界です。物を作る人とそれを欲しい人、その間の物流や配送がすべてネットワーク化された、需要と供給が最適化される次世代のインフラづくりを私たちは目指しています。
https://openlogi.com/
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
No 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
ユーザーは見つかりませんでした