156. vagrant + virturalbox 环境

vagrant 安装

下载地址

安装

  1. 添加 box 到vagrant

    1
    vagrant box add <box_name> <box_path>
    • <box_name>: 为 box 取的名字,供后续创建虚拟机
    • <box_path>: vagrantbox 所在地址
  2. 查看是否添加成功

    1
    vagrant box list
  3. 创建虚拟机

    创建一个目录, 然后在该目录下执行以下命令

    1
    vagrant init <box_name>

    会生成一个 Vagrantfile 文件

  4. 修改 Vagrantfile 文件配置

  5. 启动虚拟机

    1
    vagrant up
  6. 进入虚拟机

    1
    vagrant ssh
    • 默认用户: vagrant
    • 用户密码: vagrant
  7. 关闭虚拟机

    1
    vagrant halt

PS:

  • 每次启动虚拟机需要使用命令行(cmd)进入 Vagrantfile 文件所在的目录,然后再使用 vagrant up 命令启动虚拟机。
  • 关机同理,使用命令行(cmd)进入 Vagrantfile 文件所在的目录,然后再使用 vagrant halt 命令关闭虚拟机。

virtualbox 安装

下载地址

安装教程

双击打开, 默认安装就可以

Ubuntu镜像地址

清华镜像站

fate 官方测试使用的版本为 18.04

vagrant 系统外部可访问

win10系统下的设置

step1. 设置防火墙入站规则

  1. 进入windows 防火墙

  2. 控制面板 -> 系统和安全 -> Windows Defender 防火墙 -> 高级设置 -> 入站规则 -> 文件和打印机共享(回显请求 - ICMPv4-In)

  3. 右键属性 -> 作用域 -> 远程IP地址 -> 下列 IP 地址 -> 添加

  4. 我使用的是 此IP地址或子网

    目的: 仅允许部分用户使用

    如添加: 10.132.0.0/16

测试是否成功配置

即查看是否可以 ping 通

step2. 设置 vagrantfile 为桥接网络

  1. 查看名称或接口索引

    • 方法1

      1
      netsh interface ipv4 show interfaces

      我的这里是 WLAN

    • 方法2 (未测试)

      1. 打开”控制面板”。您可以在开始菜单中搜索”控制面板”,然后选择相应的结果打开它。
      2. 在控制面板窗口中,将视图设置为”小图标”或”大图标”,以便更轻松找到所需的项目。
      3. 找到并点击”网络和共享中心”。
      4. 在左侧导航栏中,点击”更改适配器设置”,以打开网络连接设置。
      5. 在网络连接设置中,您将看到可用的网络适配器列表。查找您希望用作桥接网络的适配器,例如您的有线网卡或无线网卡。
      6. 右键单击所选适配器,并选择”属性”。
      7. 在适配器属性对话框中,找到并选中”Internet 协议版本 4 (TCP/IPv4)”,然后点击”属性”按钮。
      8. 在”Internet 协议版本 4 (TCP/IPv4) 属性”对话框中,您可以看到适配器的IP地址配置。请注意当前配置的详细信息,以便在后续步骤中进行参考。
      9. 在同一对话框中,点击”高级”按钮。
      10. 在”高级 TCP/IP 设置”对话框中,切换到”IP 设置”选项卡。
      11. 在”IP 设置”选项卡中,您将看到网卡的名称和接口索引。记下名称或接口索引,这将用于Vagrantfile中的网络配置。
  2. 设置 config.vm.network "public_network", bright: "WLAN"

    bright: 就是上面的“查看名称或接口索引 ”

  3. 启动/重启虚拟机: vagrant up/vagrant reload

  4. 查看ip地址: ifconfig, 我这里的是 10.132.22.5

  5. 设置Vigrant: config.vm.network "public_network", bright: "WLAN", ip: "10.132.22.5"

    也可以加入子网掩码, 如 config.vm.network "public_network", bridge: "WLAN", netmask: "255.255.0.0", ip: "10.132.22.5"

step3. 更改 vagrant 密码

passwd

1
2
sudo su
passwd vagrant

PS: 更多信息查看 Ubuntu 处理方法

FAQ

  • 华硕主板打不开virtualbox虚拟机的ubuntu安装系统 (虚拟机VirtualBox异常退出解决办法)
  • vagrant ssh 连接 remote host identification has changed
  • 解决vagrant ssh登录时permission deny的问题

华硕主板打不开virtualbox虚拟机的ubuntu安装系统 (虚拟机VirtualBox异常退出解决办法)

vagrant 启动失败 There was an error while executing VBoxManage, a CLI used by Vagrant for controlli……

进入 BIOS 下, 开启 Intel (VMX) 虚拟化技术

vagrant ssh 连接 remote host identification has changed

找到.ssh目录,下面有一个known_hosts文件,删除 ~/.ssh/known_hosts 文件,或者如果你可以判断出known_hosts中原ssh服务器的公钥,删去那部分,

解决vagrant ssh登录时permission deny的问题

  1. 进入虚拟机

    • 方法1: vagrant ssh

      Vagrantfile 文件夹下打开 cmd, 运行命令 vagrant ssh

    • 方法2: virtualbox

      打开 Vagrantfile 中的 virtualbox 显示

      1
      2
      3
      config.vm.provider "virtualbox" do |vb|      
      vb.gui = true # 启动机器时显示 VirtualBox GUI
      end

      然后运行 vagrant up (虚拟机处于关机状态) 或 vagrant reload (虚拟机处于开机状态)

  2. 更改 /etc/ssh/sshd_config 文件下的 PasswordAuthentication no 改为 PasswordAuthentication yes

  3. 重启虚拟机 vagrant reload

不在一个小局域网,而在同一个大局域网

那就把局域网扩大一些, 可以通过设置子网掩码来设置

  • 临时设置子网掩码

    1. 查看网络: ifconfig

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
      inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255
      inet6 fe80::3b:7bff:feb7:3b2d prefixlen 64 scopeid 0x20<link>
      ether 02:3b:7b:b7:3b:2d txqueuelen 1000 (Ethernet)
      RX packets 523 bytes 61926 (61.9 KB)
      RX errors 0 dropped 0 overruns 0 frame 0
      TX packets 387 bytes 70310 (70.3 KB)
      TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

      enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
      inet 10.10.32.32 netmask 255.255.255.0 broadcast 10.10.32.255
      inet6 240c:c983:5:2b48::813 prefixlen 128 scopeid 0x0<global>
      inet6 240c:c983:5:2b48:a00:27ff:feab:56e5 prefixlen 64 scopeid 0x0<global>
      inet6 fe80::a00:27ff:feab:56e5 prefixlen 64 scopeid 0x20<link>
      ether 08:00:27:ab:56:e5 txqueuelen 1000 (Ethernet)
      RX packets 1089 bytes 184808 (184.8 KB)
      RX errors 0 dropped 0 overruns 0 frame 0
      TX packets 85 bytes 12017 (12.0 KB)
      TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

      lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
      inet 127.0.0.1 netmask 255.0.0.0
      inet6 ::1 prefixlen 128 scopeid 0x10<host>
      loop txqueuelen 1000 (Local Loopback)
      RX packets 0 bytes 0 (0.0 B)
      RX errors 0 dropped 0 overruns 0 frame 0
      TX packets 0 bytes 0 (0.0 B)
      TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
    2. 设置子网

      1
      sudo ifconfig enp0s8 10.10.32.32 netmask 255.255.0.0