vagrant up したらエラー「sudo: sorry, you must have a tty to run sudo」が出たときの対処
Puppet のための試験環境として、Mac に VirtualBox と Vagrant を入れています。で、あるときから、vagrant up するたびにエラーが出るようになりました。原因と解決方法をメモしておきます。環境は下記のとおりです。
- Mac OS X Mountain Lion(10.8.4)
- VirtualBox 4.2.16
- Vagrant 1.2.7
- config.vm.box = "centos-6.4-puppet"
- config.vm.box_url = "http://puppet-vagrant-boxes.puppetlabs.com/centos-64-x64-vbox4210.box"
エラー内容
初回は vagrant up して仮想マシンが立ち上がる。で Puppet のマニフェストを適用して、サーバ設定を変更したり。しかし、Mac を一度でも落とした後、vagrant up すると下記のエラーメッセージ。
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Setting the name of the VM...
...
[default] Setting hostname...
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!
sed -i 's/\(HOSTNAME=\).*/\1foo.example.local/' /etc/sysconfig/network
Stdout from the command:
Stderr from the command:
sudo: sorry, you must have a tty to run sudo
また、仮想マシンは一応立ち上がるのですが、vagrant ssh で入ってみたら、/vagrant にマウントがされてない状態。
さらには、仮想マシンを一旦停止させてから起動させようにも、vagrant halt できません。結局、毎回 vagrant destroy するハメに。。
$ vagrant halt
[default] Attempting graceful shutdown of VM...
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!
shutdown -h now
Stdout from the command:
Stderr from the command:
sudo: sorry, you must have a tty to run sudo
原因
Puppet のマニフェストを適用して、/etc/sudoers を変更しているのですが、その中の下記の記述がマズかったようです。
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear. # You have to run "ssh -t hostname sudo <cmd>". Defaults requiretty