无法确定 'vagrant' 的用户 ID,此系统上是否存在该用户?

cannot determine user id for 'vagrant', does the user exist on this system?

我尝试在 digital ocean 上提供 vagrant box,但 chef solo 失败

==> ds_cabinet_do: Chef::Exceptions::UserIDNotFound
==> ds_cabinet_do: --------------------------------
==> ds_cabinet_do: cannot determine user id for 'vagrant', does the user exist on this system?

这是我的 Vagrantfile:

  1 Vagrant.configure('2') do |config|
  2   config.vm.define :ds_cabinet_do do |config|
  3     config.vm.hostname = 'cabinet'
  4     config.vm.network 'forwarded_port', guest: 3000, host: 3000
  5 
  6     #according to https://github.com/smdahlen/vagrant-digitalocean
  7     config.vm.provider :digital_ocean do |provider, override|
  8       override.ssh.private_key_path = '~/.ssh/id_do_vbox'
  9       override.vm.box = 'digital_ocean'
 10       override.vm.box_url = 'https://github.com/smdahlen/vagrant-digitalocean/raw/master/box/digital_ocean.box'
 11 
 12       provider.token = 'b6c724f53dca64df5e5310e042852e89ea6b6ca1492c45f17a584041aaf71200'
 13       provider.image = '14.10 x64'
 14       provider.region = 'nyc2' #['nyc1', 'ams1', 'sfo1', 'nyc2', 'ams2', 'sgp1', 'lon1', 'nyc3', 'ams3']]
 15       provider.size = '512mb'
 16     end
 17 
 18     #config.vm.synced_folder '../..', '/home/vagrant/my_src'
 19     config.ssh.forward_agent = true # to use host keys added to agent
 20 
 21     # provisioning
 22     config.vm.provision :shell, :inline => 'sudo apt-get update'
 23     config.vm.provision :shell, :inline => 'sudo apt-get install ruby2.1-dev build-essential'
 24     config.vm.provision :shell, :inline => 'sudo gem install chef --version=11.8.2 --no-ri --no-rdoc'
 25 
 26     config.vm.provision 'chef_solo' do |chef|
 27       chef.log_level = 'info'
 28       chef.environment = 'development'
 29       chef.environments_path = 'environments'
 30       chef.cookbooks_path = ['cookbooks', 'site-cookbooks']
 31       chef.roles_path = 'roles'
 32       chef.data_bags_path = 'data_bags'
 33       chef.json.merge!(JSON.parse(IO.read('nodes/10.2.2.15.json')))
 34     end
 35   end
 36 end

系统中似乎没有用户vagrant,因为/etc/passwd文件

中没有相应的行

看来您已经有了答案,但请允许我尝试进一步弄清楚。

vagrant 用户历来是 Vagrant 用来通过 SSH 连接到它的盒子的默认用户。它是作为访问 VM 的标准方式创建的。 VirtualBox(可能还有 Vagrant 支持的所有其他本地虚拟机管理程序)基盒已将此用户纳入 insecure_private_key 预授权。这个密钥在所有 Vagrant 安装中都是相同的,它有 2 个基本推论:

  • 顾名思义,它是不安全的(Vagrant 被视为仅开发技术的原因之一)
  • 它允许我们共享基本框而不必担心身份验证

请记住,在创建 Vagrant 时,它与 VirtualBox 耦合在一起。后来添加了其他管理程序和云提供商。

云的工作方式与本地管理程序截然不同。身份验证通常不会在 VM 映像中进行,因此不能使用不安全的密钥。无论如何你可能不想要那样,因为它会让你的云 Vagrant 实例向世界开放,因为任何人都可以拿到密钥。

如果您阅读 README for the DigitalOcean provider,您会发现其中一项功能是

"setup a SSH public key for authentication"

该密钥将设置在您正在使用的 VM 映像的默认管理员用户上(可能是 root,可能是 ubuntu,等等)。

您不应该假定用户 vagrant 存在于此。很可能不是。