ubuntu/xenial64
のboxを使うとvagrantユーザーではなく、ubuntuユーザーが作成されています。vagrant ssh
した時はこのubuntuユーザーでログインしているとおもいます。
ですが、ほかのsshクライアントからログインしたい場合にubuntuユーザーではログインパスワードがvagrant
やubuntu
とはなっておらず、探し出すのは難しいようです。なので、provisionの時点でvagrant
ユーザーを作っちゃいましょう。
シェルスクリプトを準備
# !/bin/bash
if ! grep -sqE "^vagrant" /etc/passwd ; then
PASSWORD=$(perl -e 'print crypt('vagrant', "\$6\$");')
sudo useradd -p ${PASSWORD} -G sudo -m -s /bin/bash vagrant
fi
sudo sh -c "echo 'vagrant ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/90-cloud-init-users-vagrant"
vagrantでubuntu/xenial64のユーザーとパスワード設定を参考にさせていただきました。
元記事からの変更点は2つ。
- if文でvagrantユーザーが作成済みかどうかをチェックする
- vagrantユーザーでは
sudo
をパスワードなしで実行できるようにする
if文でvagrantユーザーが作成済みかどうかをチェックする
provisionを複数回実行するハメになったとしてもエラーで止まることは無いはずです。
if文がないと useradd: user 'vagrant' already exists
とかでエラーになってそれ以降のprovisionがあっても実行されなかったので、追加しました。
vagrantユーザーではsudo
をパスワードなしで実行できるようにする
sudo
グループに所属していてもsudoを実行するときにはパスワードを求められるので、従来と同じようにvagrantユーザーでのsudo実行時もパスワードなしで実行できるように追加しました。
Vagrantfileにprovisionを追加
config.vm.provision "shell", privileged: false, path: "bootstrap.sh"
この1行をEnable provisioning with a shell script.
というコメントブロックのあたりに追加してください。
あとは vagrant up
なり vagrant provision
をしてみてください。
その後、SSHクライアントからvagrant
ユーザーでパスワードvagrant
を使ってログインできればOKです。
あとは sudo su
とかしてパスワードを聞かれることなくrootになれるはずです。