Vagrant のゲストOSに任意のユーザーでSSH接続する【#np2020】

vagrant
なんか地味にハマったのでメモがてら。



デプロイのテスト用サーバをローカルに用意しようと思ってVagrantインスタンスを立ち上げたんだけど、実運用上のログインユーザーは「vagrant」ではないので、ローカルでも基本的に実運用上のログインユーザー(例えば「webuser」)でログインするようにしたい。「vagrant」でログインして変更しても別に良いんだけど、面倒なので。


手順は以下の通り。

  1. ゲストOSでユーザーを作成する
  2. su が使えるようにする
  3. 秘密鍵・公開鍵を生成する
  4. 公開鍵をゲストOS上に配置する
  5. パスワード無しで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を起動すれば……といいたいところですが、この状態だと、

  1. 「webuser」でログインする
  2. Vagrant起動に関するコマンドを実行しようとするが、「webuser」には権限がない
  3. エラー

となって起動出来ません。これは「webuser」にパスワード無しでsudoする権限を付与してやれば解決出来ます。公開サーバではあんまりやりたくない設定ですが、まあローカルなので。

# visudo

# %wheel        ALL=(ALL)       NOPASSWD: ALL
%wheel        ALL=(ALL)       NOPASSWD: ALL

これでvagrant upしてやれば、ログインユーザーが「webuser」の状態でVagrantが立ち上がります。


苦労した割に対して実りがなかったような気がしますが、まあいいじゃないですか……




参考サイト

CentOS 7.4 でサーバー構築(ユーザー作成~SSH開通編) – Qiita
vagrant ssh のログインで使用するユーザ名と秘密鍵を変更する – Qiita
CentOSでuserをsudo可能にする – Qiita