デプロイのテスト用サーバをローカルに用意しようと思ってVagrantインスタンスを立ち上げたんだけど、実運用上のログインユーザーは「vagrant」ではないので、ローカルでも基本的に実運用上のログインユーザー(例えば「webuser」)でログインするようにしたい。「vagrant」でログインして変更しても別に良いんだけど、面倒なので。
手順は以下の通り。
- ゲストOSでユーザーを作成する
- su が使えるようにする
- 秘密鍵・公開鍵を生成する
- 公開鍵をゲストOS上に配置する
- パスワード無しでsudo出来るように設定する
1. ゲストOSでユーザーを作成する
ゲストOSに合わせて適当に作成してください。自分の環境(CentOS7)だとこんな感じ。
# useradd webuser
# passwd webuser
# gpasswd -a webuser wheel
2. su が使えるようにする
# vi /etc/pam.d/su
#auth required pam_wheel.so use_uid
↓
auth required pam_wheel.so use_uid
これでwheelグループに所属しているユーザーはsuが使えるようになります。ということは「vagrant」をwheelグループに含めておかないと面倒なことになるので、入れておきます。
# gpasswd -a vagrant wheel
3. 秘密鍵・公開鍵を生成する
適当に作成してください。無駄にこんなことやってみてもOK。
$ ssh-keygen -t ed25519 -P "" -C "webuser@mysite" -f ~/.ssh/webuser.pem
この場合、秘密鍵「webuser.pem」と公開鍵「webuser.pem.pub」が生成されます。
4. 公開鍵をゲストOS上に配置する
webuserでログインし、~/.ssh/authorized_keys を作成、先ほど作った公開鍵の中身をコピーします。$ mkdir .ssh
$ chmod 700 .ssh
$ vi .ssh/authorized_keys
$ chmod 600 .ssh/authorized_keys
これでOK。
5. パスワード無しでsudo出来るように設定する
4までで任意のユーザーでログイン出来るようになります。Vagrantfile に以下を追加しましょう。
config.ssh.username = "webuser"
config.ssh.private_key_path = "/Users/webuser/.ssh/webuser.pem"
これでVagrantを起動すれば……といいたいところですが、この状態だと、
- 「webuser」でログインする
- Vagrant起動に関するコマンドを実行しようとするが、「webuser」には権限がない
- エラー
となって起動出来ません。これは「webuser」にパスワード無しでsudoする権限を付与してやれば解決出来ます。公開サーバではあんまりやりたくない設定ですが、まあローカルなので。
# visudo
# %wheel ALL=(ALL) NOPASSWD: ALL
↓
%wheel ALL=(ALL) NOPASSWD: ALL
これでvagrant upしてやれば、ログインユーザーが「webuser」の状態でVagrantが立ち上がります。
苦労した割に対して実りがなかったような気がしますが、まあいいじゃないですか……
参考サイト
CentOS 7.4 でサーバー構築(ユーザー作成~SSH開通編) – Qiitavagrant ssh のログインで使用するユーザ名と秘密鍵を変更する – Qiita
CentOSでuserをsudo可能にする – Qiita