5
6

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 5 years have passed since last update.

Session Manager経由でEC2にsshする

Posted at

Session Manager経由でEC2にsshする

クラメソさんのブログ以上のことは何もやっていないですが、いくつかハマったポイントが有ったので記録に残しておきます。

手順

サーバにssm-agentをインストールする

通常のEC2を立ち上げる場合はデフォルトでインストールされているようです。
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/sysman-manual-agent-install.html

2017 年 9 月以降の Amazon Linux 基本 AMI にインストールされます。SSM エージェント は、デフォルトで、Amazon Linux 2 AMI にもインストールされます。

ECSで使うインスタンスの場合は、自分でssm-agentを入れないといけないようなのでuserdata.shに以下のように書いてインストールするようにします。

#!/bin/bash

sudo yum update -y
sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
sudo systemctl enable amazon-ssm-agent
sudo systemctl start amazon-ssm-agent

echo ECS_CLUSTER=MY_CLUSTER >> /etc/ecs/ecs.config ## MY_CLUSTERの部分は環境に合わせて変えてください

MacにSession Managerプラグインをインストール

手元のmacにはaws-cliがインストールされているのですが、sessionmanager-bundleというものが必要らしいのでをインストールします。

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

これで準備が完了したのですが、自分はもう少しハマりました。

ハマったところ

  • mac側のpythonが2系でないといけない
    • pyenvでpython3系を使っていたのですが、2系でないと動きません。
    Traceback (most recent call last):
      File "/Users/admin/.pyenv/versions/3.7.0/bin/aws", line 11, in <module>
        load_entry_point('aws==0.2.5', 'console_scripts', 'aws')()
      File "/Users/admin/.pyenv/versions/3.7.0/lib/python3.7/site-packages/pkg_resources/__init__.py", line 480, in load_entry_point
        return get_distribution(dist).load_entry_point(group, name)
      File "/Users/admin/.pyenv/versions/3.7.0/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2693, in load_entry_point
        return ep.load()
      File "/Users/admin/.pyenv/versions/3.7.0/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2324, in load
        return self.resolve()
      File "/Users/admin/.pyenv/versions/3.7.0/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2330, in resolve
        module = __import__(self.module_name, fromlist=['__name__'], level=0)
      File "/Users/admin/.pyenv/versions/3.7.0/lib/python3.7/site-packages/aws/main.py", line 23
        print '%(name)s: %(endpoint)s' % {
                                     ^
  • EC2のiam_profileがついてなく、権限が足りずに困った
    SSHされる側のサーバにIAMの権限が必要です。AmazonEC2RoleforSSMという権限を付けましょう。

  • iam_profileをつけても、ssm-managerが権限を読み込むために再起動が必要だった
    コンソールから権限をつけるだけで、ssm-managerが読み直してくれるかと思ったのですがssm-managerの再起動が必要なようです。

以上で準備完了です。

クラメソさんのブログに~/.ssh/configのtipsが載っていたのですが、こういう書き方ができるんですね。

ssm-agent経由でログインする場合、指定するのがipではなくインスタンスIDなのですが、インスタンスIDを実行したときはこのコマンドをプロキシして実行する設定です。これを書いておくことで、いつも使っているsshのコマンドのipの部分をインスタンスIDに変えるだけで実行できるようになります。

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

実際に実行してみます

$ ssh -i ~/.ssh/id_rsa ec2-user@i-00000XXXXXXXXXXX
Last login: Fri Jul 12 07:44:25 2019 from localhost

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

https://aws.amazon.com/amazon-linux-2/
7 package(s) needed for security, out of 13 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-10-1-1-203 ~]$

できましたね。
ssm-agent経由のsshは、対象インスタンスのセキュリティグループを許可していなくてもsshできます。
そしてプライベートサブネットにあるインスタンスにもログインできるようになります。
踏み台サーバが根本的に必要なくなりますね。

さらにインスタンスIDをいちいちコンソールから調べるのがめんどくさいので、以下のコマンドで調べるように出来ます。

$ aws ec2 describe-instances | jq -r '.Reservations | .[].Instances[] | [(.Tags[] | select(.Key == "Name").Value), .InstanceId, .State.Name] | @csv’

"prd-web-1a","i-000XXXXXXXXXXXXXX","stopped"
"prd-web-1a","i-001XXXXXXXXXXXXXX","running"
"dev-web-1a","i-002XXXXXXXXXXXXXX","stopped"
"dev-web-1a","i-003XXXXXXXXXXXXXX","running"
5
6
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
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?