3
0

【AWS】SessionManagerでローカル環境からSSH接続する

Last updated at Posted at 2023-08-04

SessionManager(SSM)を使うと、AWSコンソール上から
鍵ストレス無くPrivate subnetにあるEC2インスタンスにアクセスできます

加えてローカル環境からのSSH接続も可能になります
今回はローカル環境からSSHしてRDSにアクセスする方法を記事にします

前提

  • AWS上でVPC、EC2、RDS, SSMなどの構築は済んでいる想定
  • 環境 MacOS
  • AWS CLIがインストール済み
  • SSMの鍵(pemファイル)を持っている
  • EC2インスタンス linux
  • RDBエンジン Postgresql

❶SessionManagerプラグインのインストール

sessionmanager-bundleが必要になるので下記コマンドでインストールします
公式docはこちら

curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac/sessionmanager-bundle.zip" -o "sessionmanager-bundle.zip"
unzip sessionmanager-bundle.zip
sudo ./sessionmanager-bundle/install -i /usr/local/sessionmanagerplugin -b /usr/local/bin/session-manager-plugin

❷aws configureを実行する

基本的なことですがハマったポイントです。忘れちゃいけない

aws configure

色々聞かれるので答えます

    AWS Access Key ID : Hoge・・・・・・・・・・・・・・・・・・・・・・・
    AWS Secret Access Key : Huga・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
    Default region name : YOUR-REGION
    DEfault output format : JSON

AWS Access key ID AWS Secret Access Keyは、
AWSコンソールのスタートページから確認できます

image.png

ちなみに、上記スタートページの
Run the following commands in your terminal.
の部分をクリックすると環境変数がコピーされるので
ターミナル上にペーストして実行すれば、aws configureしなくてすみます
※こっちの方が早い

export AWS_ACCESS_KEY_ID="・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・"
export AWS_SECRET_ACCESS_KEY="・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・"
export AWS_SESSION_TOKEN="・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・"

❸ sshのconfigファイルを工夫する

このステップは工夫なので必須ではないです
ssm-agent経由でログインする場合、指定するのがipではなくインスタンスIDなのですが、
インスタンスIDを実行したときはこのコマンドをプロキシして実行する設定らしいです。
※考えた人すごい

# SSH over Session Manager
host i-* mi-*
    ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"

❹sshで接続する

いよいよ接続します!コマンドはこんな感じです

ssh -i YOUR_PEM_FILE_PATH ec2-user@YOUR_INSTANCE_ID

ステップ3でconfigをいじったので
こんな感じで接続できます

ssh -i ~/key/my-key.pem ec2-user@i-○○○○○○○○○○○○○○○

繋がりましたー
image.png

【めんどくさがりの人へ】 もっと楽に接続する

正直これだと結構めんどいので、できるだけ楽にします

❶zshrcファイルにエイリアスを登録する

.zshrcを開きます

vi ~/.zshrc

下記のようなエイリアスを追記します
今回はDev環境のインスタンスへのSSM接続と言う体で、ssmdevという名前にします
記述したらescキー:weで保存してviを抜けます

alias ssmdev="ssh -i YOUR_PEM_KEYS_PATH ec2-user@YOUR_INSTANCE_ID"

.zshrcを読み込む

source ~./zshrc

これで、エイリアスを使ってSSH接続できるようになります!
上記のConfigureのところで説明した環境変数群をターミナルで叩いてから
エイリアスを実行しないと上手くいきません

ssmdev

ec2に繋がりました
image.png

❷EC2インスタンス内にもエイリアスを仕込む(Linuxの場合)

EC2インスタンスにSSH接続した状態で、
直下のファイル構成を見るとこのようになっているはずです

image.png

.bashrcをいじって、またもやエイリアスを登録します

vi .bashrc

Postgresqlの場合はこのようになります。適宜DBの情報を入力してください
今回はRDSへの接続なのでsessionという名前にします
記述したらescキー:weで保存してviを抜けます

alias session="psql --host=YOUR_HOST --port=5432 --dbname=YOUR_DB_NAME --username=YOUR_USER_NAME --password"

.bashrcを読み込む

source ~./bashrc

準備はできたので、繋ぎます!

登録したエイリアスを実行

session

RDSのパスワードを聞かれるので答えます
image.png

RDSに繋がりました!
image.png

各環境ごとにEC2インスタンスがある方はssmstageとかssmprodとか
同じように作ればいいと思います

おわりに

本当はTablePlusでSSH接続したいんですけどパブリックIPがないと無理なので
とりあえずこれで我慢。

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