LoginSignup
7
2

More than 3 years have passed since last update.

EC2起動時に自動でユーザーを追加し、諸々の設定をする方法メモ

Last updated at Posted at 2019-07-22

概要

user-dataを用いることで、EC2の起動時に任意のシェルを実行することができます。

それを用いて、①EC2起動時にユーザを作成し②そのパスワードを設定し③パスワード認証でのsshを許可させる、という処理を行います。

シェルの中身

CentOS7で動くことを確認しています。

#! /bin/bash

# ユーザの追加
useradd testuser
# パスワードの設定
echo "testpasswd" | sudo passwd --stdin testuser
# sudoの許可
sed -i -e '$ a testuser ALL=(ALL)    NOPASSWD:ALL' /etc/sudoers
# sshの際、パスワードでの認証の許可
sed -i -e 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
# sshdを再起動し、設定を反映
systemctl restart sshd

おまけ

AMIからEC2インスタンスを立ち上げると、Volumeが作成されます。私の会社では、この作成されたVolumeにタグをつけなければならないことになっているのですが、このタグ付の作業も、user-dataの中で行えます。

以下のスクリプトは、aws-cliがインストールされている環境であれば動くと思います。

# このシェルが動いているEC2のインスタンスidを取得
instance_id=$(curl -s 169.254.169.254/latest/meta-data/instance-id)
# このシェルが動いてるEC2のregionを取得
az=$(curl -s 169.254.169.254/latest/meta-data/placement/availability-zone)
region=${az%[a-z]}
# インスタンスidから、インスタンス名を取得
instance_name=$(aws ec2 describe-instances --output text --region $region --instance-ids $instance_id \
  --query 'Reservations[].Instances[].Tags[?Key==`Name`].Value')
# このインスタンスに紐づくVolumeのidを取得
volume_id=$(aws ec2 describe-instances     --output text --region $region --instance-ids $instance_id \
  --query 'Reservations[].Instances[].BlockDeviceMappings[?DeviceName==`/dev/sda1`].Ebs[].VolumeId')
# タグをつける
aws ec2 create-tags --region $region --resources $volume_id --tags Key=SomeKey,Value=SomeValue
aws ec2 create-tags --region $region --resources $volume_id --tags Key=OtherKey,Value=OtherValue
7
2
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
7
2