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になれるはずです。