EC2インスタンスのSSHユーザーをユーザーデータで変更する

Amazon Linux 2のEC2インスタンスを作成した際、デフォルトでSSH接続用の公開鍵が設定されるユーザーはec2-userです。ユーザーデータにてそのSSH接続できるユーザーを変更します。
2020.03.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

結論: 作成したユーザーデータスクリプト

new_user というユーザーでSSH接続できるようにしています。(ec2-userではできなくなります)

#!/bin/bash
adduser new_user
usermod -G wheel new_user
mkdir /home/new_user/.ssh
mv /home/ec2-user/.ssh/authorized_keys /home/new_user/.ssh/
chown -R new_user:new_user /home/new_user/.ssh
echo "new_user ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/new_user-nopasswd

処理解説

#!/bin/bash

bashを用いたシェルスクリプトであることを明示しています。

adduser new_user

ユーザーを追加するコマンドです。このコマンドによりこのユーザーのホームディレクトリ/home/new_user/が作成されます。

usermod -G wheel new_user

ユーザーの所属グループをwheelに変更します。wheelはec2-userの所属するグループです。sudoコマンドを使える権限を持ちます。

mkdir /home/new_user/.ssh / mv /home/ec2-user/.ssh/authorized_keys /home/new_user/.ssh/

インスタンス作成時に指定したSSH公開鍵の情報はec2-user.ssh/authorized_keys内に書かれるので、そのファイルを新ユーザー配下へ移動させます。

chown -R new_user:new_user /home/new_user/.ssh

ユーザーデータはroot権限で実行されます。ですので /home/new_user/.ssh の所有者はrootになっています。所有者を接続ユーザーに変更する必要があります。(グループは必ずしも変更する必要はありませんが念のため)

echo "new_user ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/new_user-nopasswd

パスワード無しでsudoコマンドを使えるようにします。 ec2-userと同様の設定です。ec2-userの設定は同一ディレクトリの/etc/sudoers.d/90-cloud-init-usersに記載されています。