从现有的虚拟机创建vagrant box ,再利用新创建的box创建虚拟机

Posted gaoblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从现有的虚拟机创建vagrant box ,再利用新创建的box创建虚拟机相关的知识,希望对你有一定的参考价值。

本人使用的虚拟机provider是virtualbox,OS是centos7

 

创建自己的virtualbox前,需要在virtualbox上已经搭建了一个虚拟机。如下为已经搭建好的虚拟机,虚拟机名称为cusbox_vb1

技术图片

 

 

利用已经搭建好的虚拟机就可以创建自己的vagrant box。创建box之前需要先关闭虚拟机。

创建vagrant box

vagrant package --base 虚拟机的名字 --output  要创建的box的名字

如:vagrant package --base cusbox_vb1 --output cusbox

  

 新创建的box位于执行vagrant命令时所在的目录

新创建的box文件如下

技术图片

 

 

 

添加vagrant box 到默认目录

vagrant box 的默认目录为~/.vagrant.d/boxes, 其中~为用户家目录。

要使用vagrant box创建虚拟机需要先将创建好的box添加到默认目录中

vagrant box add 添加后的box名  要添加的box名
vagrant box add cusbox ./cusbox 

 

查看默认目录中的所有box

添加后可以到默认目录(~/.vagrant.d/boxes)下查看,可以发现cusbox文件夹已经被添加

技术图片

 

 

 

也可以使用vagrant box list命令查看默认目录下的所有box

vagrant box list

  

 技术图片

 

 

 

初始化vagrant环境,生成vagrantfile

将box添加到默认目录后就可以初始化,以下命令执行后就会生成Vagrantfile文件

vagrant init box名称  
vagrant init cusbox

  

启动虚拟机

vagrant up

  

此时,虚拟机虽然可以启动,但无法认证,状况如下,这是因为没有配置ssh密钥

技术图片

 

 

 

 

配置SSH密钥

 

上面的原因是宿主机的默认私钥错误导致认证失败,解决方式如下:

 

 1,宿主机先执行vagrant ssh-config 查看私钥默认路径以便修改。

$ vagrant ssh-config
Host default
  HostName 127.0.0.1
  User vagrant
  Port 2221
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile C:/myvagrant/mkbox/Borg-web/.vagrant/machines/default/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL

  

IdentityFile即为密钥所在路径

 

 

vagrant up之后,会生成.vagrant目录,将现有的private_key复制到默认路径中去.vagrantmachinesdefaultvirtualbox/private_key,

 

vagrant halt关闭后再vagrant up重新启动,这时就可以正常启动,并能通过vagrant ssh命令登录到虚拟机。

 

虚拟机的公钥一般是位于/home/vagrant/.ssh目录中authorized_keys文件中,

查看如下

 

[vagrant@localhost .ssh]$ cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDa/VjIVZGQaTrPC1+k805wOJ+KGoLmwdLURHKT1RhhbNfBl1NYgbsZdTHAoE+nX1ksaM4p0yzFhDXxbiIYgJhg7gHkDHQpqzYXjZwZi9kLokxgA+gNfCu4HzDBFoOj2V0DaMEYnWRgHfpTR4Gw5brrfObwtkWy6iuNCok4a/j0Gpj16kfidTwOjYmGsfS7pGfQ+P9e9XUysQ9909MpT7rA30jeNbNN0gYr2p6M50wpXjyZLiTyMN+r1wq+oH3zSQ6dPmWu3cqyQlX7554sJDDGpmE8K4uGFgHmh+1neCoe0UWku3eYUcZKp5FnkfvKPVNHuW4lzY7IwKHsjWQ7q92Z vagrant
[vagrant@localhost .ssh]$ 

 

  

2.如果没有现成的公钥和私钥,可以使用ssh-keygen命令生成

ssh-keygen

会生成如下两个文件id_rsa 和 id_rsa.pub,前一个为私钥文件,后一个为公钥文件,将此私钥文件的内容覆盖宿主机的默认文件即可解决认证问题。

 

因为在认证搞定之前是无法通过vagrant ssh登录的,所以通过virtual box本身的客户端功能登录用户名和密码都是vagrant,登录后就可以利用ssh-keygen生成公钥和私钥了

 

 

登录到虚拟机

 

 

vagrant ssh

 

  

 

以上是关于从现有的虚拟机创建vagrant box ,再利用新创建的box创建虚拟机的主要内容,如果未能解决你的问题,请参考以下文章

如何制作一个vagrant的base box 及安装 additions

Windows使用Vagrant和Virtual Box安装centos

二:通过VirtualBox+Vagrant创建一个centos的虚拟机:

使用 Vagrant 快速创建虚拟机

vagrant 简单使用

Linux下利用vagrant创建单台虚拟机