• 从现有的虚拟机创建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文件中,

    可以在虚拟机中的 /etc/ssh/sshd_config配置文件来查看ssh服务器公钥的保存位置

    cat /etc/ssh/sshd_config
    #PubkeyAuthentication yes
    
    # The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
    # but this is overridden so installations will only check .ssh/authorized_keys
    AuthorizedKeysFile      .ssh/authorized_keys

    查看如下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,前一个为私钥文件,后一个为公钥文件,将此私钥文件的内容覆盖宿主机的默认文件即可解决认证问题。

    即用私钥id_rsa的内容覆盖.vagrantmachinesdefaultvirtualbox/private_key的内容

    并将公钥id_rsa.pub的内容添加到虚拟机 ~/.ssh/authorized_keys中去,可以使用如下命令

    cat id_rsa.pub >> authorized_keys

    在Liunx环境下, 如果要查看、复制私钥、公钥, 以及authorized_keys等文件, 不要使用vim等编辑器打开, 因为它会产生不必要的回车;

    应该通过cat、more、less等查看命令把内容打印到终端上, 再作查看、复制等操作.

    另外,为了让私钥文件和公钥文件能够在认证中起作用, 需要确保权限的正确性:

    ① 对于.ssh目录以及其内部的公钥、私钥文件, 当前用户至少要有执行权限, 其他用户最多只能有执行权限.
    
    ② 不要图省事设置成777权限: 太大的权限不安全, 而且数字签名也不支持这种权限策略.
    
    ③ 对普通用户, 建议设置成600权限: chmod 600 authorized_keys id_rsa id_rsa.pub;
    
    ④ 对root用户, 建议设置成644权限: chmod 644 authorized_keys id_rsa id_rsa.pub.

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

    登录到虚拟机

    vagrant ssh
    

      

  • 相关阅读:
    Python3中urllib使用介绍
    python urllib和urllib3包
    Python--urllib3库
    Python基础-变量作用域
    Python 面向对象三(转载)
    Python 面向对象二(转载)
    Python 面向对象一(转载)
    YAML 在Python中的应用
    Redis 命令二
    基于Redis的Bloomfilter去重(转载)
  • 原文地址:https://www.cnblogs.com/gaoBlog/p/11617876.html
Copyright © 2020-2023  润新知