【EC2】ユーザーデータを使ってSSHログインユーザーを追加する方法

【EC2】ユーザーデータを使ってSSHログインユーザーを追加する方法

ユーザーデータを使ってSSHログインユーザを追加する方法 を紹介します。

前提として、使用するOSはAmazon Linux 2です。

ユーザーデータはroot権限で実行するので、何かトラブルが起こってSSHできるユーザーがいないときなどに役立つと思います。

というわけで、さっそくやってみましょう。

SSHログイン用のキーペアを作成する

※すでにキーペアを作成済みの場合は、この章をスキップいただいて問題ありません。

マネジメントコンソールのEC2のメニューから キーペア を選択し、キーペアを作成 を選択します。

追加したいユーザーの名前を、ここでは add-user としますので、キーペアの名前も同じにしておきます。
※キーペア名は任意の名前でも大丈夫です。

 

キーペアを作成 を選択すると、秘密鍵のダウンロードが自動的に始まります。
秘密鍵は一度しかダウンロードできないので、大事に保管してください。

それでは、この秘密鍵から公開鍵を作成します。
コマンドプロンプトやターミナルで、下記コマンドを入力して公開鍵を出力し、クリップボードなどにコピーしておきます。

> ssh-keygen -yf add-user.pem
ssh-rsa AAAAB3NzaC1yc2EAAAA(以下省略)

ユーザーデータでSSHログインユーザーを追加する

では、練習用にEC2インスタンスを起動し、
ec2-userでsshログインし、初期状態のOSユーザー一覧を下記コマンドで確認します。

[ec2-user@ip-10-0-0-10 ~]$ cat /etc/passwd | grep bash
root:x:0:0:root:/root:/bin/bash
ec2-user:x:1000:1000:EC2 Default User:/home/ec2-user:/bin/bash
[ec2-user@ip-10-0-0-10 ~]$ ls -all /home/
total 0
drwxr-xr-x 3 root root 22 Sep 10 08:42 .
dr-xr-xr-x 18 root root 257 Sep 10 08:42 ..
drwx—— 3 ec2-user ec2-user 74 Sep 10 08:42 ec2-user
[ec2-user@ip-10-0-0-10 ~]$

デフォルトでは、root と ec2-userしかいませんね。
では、ここにユーザーデータを使って add-user を追加します。

ユーザーデータを編集するには、EC2インスタンスを停止させる必要があります。
なので、一旦このままEC2インスタンスを停止させます。

では、ユーザーデータを編集します。
ユーザーデータの編集は、対象のEC2インスタンスにチェックを入れて、
アクション > インスタンスの設定 > ユーザーデータを編集 を選択します。

下記の通りユーザーデータを入力して、保存を選択します。

#cloud-config
cloud_final_modules:
– [users-groups,always]
users:
– name: add-user
groups: [ wheel ]
sudo: [ “ALL=(ALL) NOPASSWD:ALL” ]
shell: /bin/bash
ssh-authorized-keys:
– ssh-rsa AAAAB3NzaC1yc2EAAAA(以下省略)

これで、ユーザーデータの変更が完了しました。

では、EC2インスタンスを起動し、ユーザーadd-userでSSH接続してみます。

$ ssh -i “add-user.pem” add-user@ec2-52-199-163-68.ap-northeast-1.compute.amazonaws.com
The authenticity of host ‘ec2-52-199-163-68.ap-northeast-1.compute.amazonaws.com (52.199.163.68)’ can’t be established.
ED25519 key fingerprint is SHA256:fbNrSgj0sjPXZcnCvygCyVaEdCU6Rkb6TpwzfhYWJww.
This host key is known by the following other names/addresses:
~/.ssh/known_hosts:11: ec2-3-112-221-238.ap-northeast-1.compute.amazonaws.com
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added ‘ec2-52-199-163-68.ap-northeast-1.compute.amazonaws.com’ (ED25519) to the list of known hosts.
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|https://aws.amazon.com/amazon-linux-2/
3 package(s) needed for security, out of 8 available
Run “sudo yum update” to apply all updates.
[add-user@ip-10-0-0-10 ~]$

SSHログインできました!

念のため、ログインユーザーとhomeディレクトリも確認しておきます。

[add-user@ip-10-0-0-10 ~]$ whoami
add-user
[add-user@ip-10-0-0-10 ~]$ pwd
/home/add-user
[add-user@ip-10-0-0-10 ~]$ sudo ls -all
total 12
drwx—— 3 add-user add-user 74 Sep 10 08:49 .
drwxr-xr-x 4 root root 38 Sep 10 08:49 ..
-rw-r–r– 1 add-user add-user 18 Jul 15 2020 .bash_logout
-rw-r–r– 1 add-user add-user 193 Jul 15 2020 .bash_profile
-rw-r–r– 1 add-user add-user 231 Jul 15 2020 .bashrc
drwx—— 2 add-user add-user 29 Sep 10 08:49 .ssh
[add-user@ip-10-0-0-10 ~]$ cat /etc/passwd | grep bash
root:x:0:0:root:/root:/bin/bash
ec2-user:x:1000:1000:EC2 Default User:/home/ec2-user:/bin/bash
add-user:x:1001:1001::/home/add-user:/bin/bash

ちゃんとadd-userでログインでき、ホームディレクトリも作成されており、sudoコマンドも使えました。
ということで、正しくユーザが作成できたことを確認できました!

スクリプト解説

1行の「#cloud-config」は、このスクリプトはcloud-initの書式であることを宣言しています。

2行目の「cloud_final_modules」は、cloud_initの中の実行タイミングを指します。
cloud-initは、以下の3つの順番で実行されます。

  1. cloud_init_modules
  2. cloud_config_modules
  3. cloud_final_modules

3行目の「[users-group, always]」は、
cloud_final_modulesの中での実行タイミングがuser-groupであることを指します。
alwaysはcloud-initが実行される都度このスクリプトも実行するという意味になります。

4行目以降は、作成するユーザーの設定になっています。
wheelグループに属することで、sudoコマンドも実行権限を持ちます。
合わせて、SSHに必要な公開鍵の配置もします。

詳細は、下記公式ドキュメントをご参照ください。
Module Reference — cloud-init 22.3 documentation

まとめ

今回は、ユーザーデータを使ってSSHログインユーザを追加する方法 を紹介しました。

ユーザーデータにcloud-initの書式で適切に指定することで、SSHログインユーザーを作成できました。
トラブルなどでSSHログインできるユーザーがない場合などにご参考ください。

\ 私たちと一緒に働きませんか? /

エムトラッドでは現在デザイナー・エンジニアを募集しています!