无法确定 '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
存在于此。很可能不是。
我尝试在 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
存在于此。很可能不是。