Skip to content

vagrant安装及配置

vagrant 可与 VirtualBox、VMware、KVM 等虚拟化软件结合,让创建虚拟机变得更加简单。


描述

vagrant官方文档

packer打包虚拟机

Creating a Base Box

Creating a Hyper-V Base Box

Creating a VirtualBox Base Box

Packer VirtualBox Builder

Packer打包centos时用到的centos.json

vagrant是基于vitualBox的,所以请先安装好vitualBox。

在线添加vagrant box

vagrant box add centos/7

TIP

centos/7是官方提供的centos7的box

官方提供的box下载地址

国内centos7.8-box下载地址

centos7.8官方提供的box详细文档

ubuntu官方提供的ubuntu20.04 vagrant box

ubuntu server iso 官方下载,选择Option 2: Manual server installation

centos iso镜像官方下载

centos 8 iso镜像官方下载

centos 8 vagrant box官方下载

ubuntu server官方文档

在线添加box存在的问题:

  • 安全性差: 在线下载的box的密码和账户都是vagrant,而且pulic key都是一样的

  • 下载慢

解决安全性问题

  • 修改vagrant及root的密码
  • 修改authorized_keys为你自己生成的id_rsa.pub
  • 修改insecure_private_key为你自己生成的id_rsa
  • 修改ssh端口号

在本文中会提供上述优化的具体实施方法.

windows中修改vagrant以及virtualbox默认存储目录

1: 修改virtualbox默认存储默认位置:

wwwechoxu

wwwechoxu

2: 修改vagrant默认存储位置:

可选择如下两种方法进行修改:

  • 用命令行修改
bash
setx VAGRANT_HOME "D:\ProgramFiles\vagrant\.vagrant.d" /M
  • 通过环境变量修改

wwwechoxu

最后将%userprofile%/下的.vagrant.d文件移动到D:\ProgramFiles\vagrant\中即可。

另外还要修改目录的权限:

wwwechoxu

ssh连接vagrant创建好的虚拟机

只能通过秘钥进行ssh连接。

秘钥位置在: Vagrantfile所在目录\.vagrant\machines下找到虚拟机名称命名的目录,然后依次找到private_key文件,这个就是私钥。

我的私钥路径在D:\vagrantFiles\centos7Box\.vagrant\machines\k8s-node1\virtualbox

创建vagrant可用的base box

官方文档

下面都是一些基本的Linux系统设置操作,可根据自己需要更改或添加配置.

创建centos7虚拟机

先用virtualbox创建一个虚拟机名称为centos7.4的虚拟机,作为创建本地Box的基础,设置好硬盘、内存、网卡、CPU等配置。

TIP

网卡1可先配置为“桥接”的连接方式,后续再改为NAT模式,新建虚拟机就不介绍里。。。

如下操作都是在刚才新建的虚拟机centos7.4上面操作。。。

安装依赖包

打开新建的centos7.4虚拟机,并在此虚拟机上安装常用的软件及编译工具包

yum -y install gcc gcc-c++ automake autoconf libtool make cmake vim wget net-tools

更新yum源

bash
sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache
yum upgrade

添加用户并赋予sudo权限

添加xujh账户,并让xujh账户拥有sudo及无需输入密码即可执行sudo的权限

WARNING

这里没有使用默认的vagrant,所以要在vagrantfile里指定username,如果用的是vagrant就不用在vagrantfile里指定用户名

添加用户

groupadd xujh

useradd xujh

usermod -g xujh xujh

注意:-G参数是添加用户到附加组,即添加用户到多个组,userdel -r xujh删除xujh所有相关的信息

修改密码并设置sudo免密登录

passwd xujh

下面的操作是让给xujh用户拥有sudo权限并免密码切换:

vim /etc/sudoers

添加

xujh ALL=(ALL) NOPASSWD: ALL

TIP

xujh需要有sudo权限。vagrant默认会在用户执行sudo命令时使用config.ssh.sudo_command = “sudo -E -H %c”定义的内容,但我设置了没有效果,所以就只能在box里给xujh设置sudo权限了。具体可参考vagrant ssh配置。

vagrant ssh配置

关闭linux防火墙及selinux

systemctl disable firewalld

sed -i ‘s/enforcing/disabled/g’ /etc/selinux/config

安装virtualbox-GuestAdditions

此扩展目的是虚拟机与物理机之间可创建共享目录,功能包括USB、copy、paste等,具体可参考virtualbox官网

virtualbox-GuestAdditions文档

virtualbox-GuestAdditions下载地址:

bash
wget http://download.virtualbox.org/virtualbox/5.2.8/VBoxGuestAdditions_5.2.8.iso
mv VBoxGuestAdditions_5.2.8.iso /home/
mkdir /dev/virtualbox
mount /home/VBoxGuestAdditions_5.2.8.iso /dev/virtualbox/ 挂载iso到/dev/virtualbox
cd /dev/virtualbox/
yum -y install bzip2    //需要的包
yum -y install kernel-devel
./VBoxLinuxAdditions.run       //安装脚本
sudo umount /dev/virtualbox/

出现如下内容即表示virtualboxGuestAdditions安装成功

bash
[root@localhost virtualbox]# ./VBoxLinuxAdditions.run
Verifying archive integrity… All good.
Uncompressing VirtualBox 5.2.8 Guest Additions for Linux……..
VirtualBox Guest Additions installer
Removing installed version 5.2.8 of VirtualBox Guest Additions…
Copying additional installer modules
Installing additional modules
VirtualBox Guest Additions: Building the VirtualBox Guest Additions kernel modules.
VirtualBox Guest Additions: Starting.

lsmod |grep vbox 也可查看是否安装成功。

注意:如果不安装GuestAdditions可能会在创建共享目录时报错

生成ssh key,实现无密码登录

如我想让本机A访问上面所建的centos7.4,可在A上面执行如下命令

ssh-keygen -b 4096 -t rsa

一直按Enter即可,默认会在~/.ssh目录下生成id_rsa id_rsa.pub两个文件,id_rsa为私钥,id_rsa.pub为公钥

scp -P 10222 ~/.ssh/id_rsa.pub vagrant@192.168.1.16:/home/xujh/.ssh/

TIP

上面的xujh代表的是创建的xujh账户,即你想要让其免密码登录的用户名,如果想让root免密码登录,需要改上面的xujh为root,但不建议 分发公钥也可用ssh-copy-id命令

下面的操作是在centos7.4的虚拟机上执行:

bash
cat /home/xujh/.ssh/id_rsa.pub >> /home/xujh/.ssh/authorized\_keys //必须操作
cd /home/xujh/
chmod 700 ~/.ssh
cd /home/xujh/.ssh
chmod 600 authorized_keys

TIP

必须保证.ssh目录权限为700,autorized_keys的权限为600或者644,不然会出现登录不了的情况

验证:ssh -p 10222 xujh@192.168.1.16 输入yes后即可无密码登录。

修改ssh的端口及ssh优化

sed -i ‘s/#Port 22/Port 10222/’ /etc/ssh/sshd_config

vim /etc/ssh/sshd_config

确保里面的内容和如下保持一致

bash
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PASSWDAuthentication no //采用密钥登录,禁用密码登录
PermitEmptyPasswords no #禁止空密码登录
PermitRootLogin no  #禁止 root 登录
  • ssh连接慢:

vim /etc /ssh/sshd_config

增加如下记录:

bash
UseDNS no
GSSAPIAuthentication no

service sshd restart 重启 SSH 服务

WARNING

不要设置hostname,不然每个主机都是这个主机名,在启动的时候会报错

做完上述操作后,一个干净可用的系统就完成了,然后就可以关闭虚拟机了。

将虚拟机导出为Box文件

自此以下的操作都是在本地执行:

mkdir vagrant //名称随便取

cd vagrant

vagrant package --output centos7.4.box --base centos7.4 //也可用packer打包,VirtualBox Builder (from an ISO)打包一个基础box

TIP

执行完成后在当前目录会生成centos7.4.box文件,centos7.4.box指的是box的名称,centos7.4指的是上面创建的虚拟机名称。

添加本地box

mkdir vagrant //名称随便取

cd vagrant

vagrant box add Centos/7.4 centos7.4.box

此时会将Centos/7.4添加到vabox add list中

初始化vagrant环境

mkdir mysqlMaster 创建一个mysqlMaster的项目名,名字根据需要随便取

cd mysqlMaster

vagrant init Centos/7.4

初始化,此处的Centos/7.4时box list中的名称,此时会在mysqlMaster目录下生成vagrantfile文件编辑Vagrantfile文件并启动虚拟机

编辑Vagrantfile

默认的Vagrantfile创建的虚拟机肯定是不符合我们的需求的,所以要适当的修改Vagrantfile文件生成符合我们需求的虚拟机

cd mysqlMaster

vim Vagrantfile //Ruby语法

内容如下,实现安装2核内存为2048m的虚拟机并安装lamp环境

ruby
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(“2”) do |config|
config.vm.box =Centos/7.4
config.ssh.username = “xujh”
#config.ssh.insert_key = false
#config.ssh.private_key_path = “~/.ssh/id_rsa”
config.vm.network :forwarded_port, guest: 10222, host: 2255
config.ssh.port = 2255
config.ssh.guest_port = 10222
config.vm.synced_folder “../Code”, “/home/vagrant/Code
config.vm.synced_folder “.”, “/vagrant”, disabled: true
config.vm.define :mysqlMaster do |mysqlMaster_config|
mysqlMaster_config.vm.hostname = “mysqlMaster”
mysqlMaster_config.vm.network :public_network,bridge: “wlp5s0”,adapter: 2,ip:192.168.1.18
mysqlMaster_config.vm.provision “shell”, path: “lamp.sh”
mysqlMaster_config.vm.provider “virtualbox” do |vb|
vb.name = “mysqlMaster”
vb.memory = 2048
vb.cpus = 2
vb.customize [“modifyvm”, :id, “–vram”, “16”]
end
end

再执行vagrant up即可开启名称为mysqlMaster的虚拟机,此虚拟机使用的是桥接网卡。

如果虚拟机已经启动了一次,同时又修改了这里的命令,想让系统再次运行这里面的命令,执行 vagrant reload –provision执行shell脚本即可安装lamp

TIP

vagrant主机名最好是小写

简单解释下Vagrant文件

bash
Vagrant.configure(“2”) do |config| //2表示使用的vagrant版本是vagrant2
config.ssh.username = “xujh” //因为没有用默认的vagrant,所以要指定用户名
config.vm.box //指定的是创建虚拟机所用的box名称
config.ssh.private_key_path //指定的是采用自己生成的私钥,而不用vagrant默认的私钥。
config.ssh.insert_key = false //关闭vagrant的默认ssh安全验证

//下面的三条命令是修改vagrant默认转发的ssh端口,改为10222
config.vm.network :forwarded_port, guest: 10222, host: 2255
config.ssh.port = 2255
config.ssh.guest_port = 10222
config.vm.define :mysqlMaster do |mysqlMaster_config //定义一个mysqlMaster的虚拟机

下面的命令是该虚拟机采用Pulic_network,默认的网络连接方式是private_network,是host-only模式,如果想让别人访问此虚拟机
就用public_network,否则就用Private_network

mysqlMaster_config.vm.network :public_network,bridge: “wlp5s0”,adapter: 2,ip: “192.168.1.18”

其中bridge: “wlp5s0″代表的是桥接无线网卡w1p5s0,因为为用的是无线,以太网是en…开头的

adapter: 2 代表的是桥接到网卡2,因为网卡1必须设为网络地址转换NAT模式。

config.vm.synced_folder “/Code”, “/home/xujh/vagrant/Code” //定义共享目录,在Code里的文件会自动同步到/home/xujh/vagrant/Code

注意:
../Code 代表的是本地当前目录的上层目录Code文件夹,必须存在
/home/vagrant/Code是创建的虚拟机mysqlMaster上的目录,必须是绝对路径,会自动创建,一般设置为nginx或者apache的ROOT地址

两个是主主关系,即不管谁添加的都会自动同步。

config.vm.synced_folder “.”, “/vagrant”, disabled: true 取消vagrant默认创建的vagrant共享目录

mysqlMaster_config.vm.provision “shell”, path: “lamp.sh” 执行shell脚本,lnmp.sh脚本和Vagrantfile在同一目录

lamp.sh内容是yum -y install mariadb mariadb-server mariadb-libs mariadb-devel httpd httpd-devel php php-mysql

vb.customize [“modifyvm”, :id, “–vram”, “16”] 设置显存为16M

更多的参数配置请参考官方文档 https://www.vagrantup.com/docs/

批量创建多个虚拟机

  • 第一种方法:

编辑Vagrantfile文件,内容如下

ruby
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(“2”) do |config|

config.vm.box =Centos/7.4
config.ssh.username = “xujh”
#config.ssh.insert_key = false
#config.ssh.private_key_path = “~/.ssh/id_rsa”

config.vm.synced_folder “../Code”, “/home/vagrant/Code
config.vm.synced_folder “.”, “/vagrant”, disabled: true

config.vm.define :mysqlMaster do |mysqlMaster_config|
mysqlMaster_config.vm.hostname = “mysqlMaster”
mysqlMaster_config.vm.network :forwarded_port, guest: 10222, host: 2255
mysqlMaster_config.ssh.port = 2255
mysqlMaster_config.ssh.guest_port = 10222
mysqlMaster_config.vm.network :public_network,bridge: “wlp5s0”,adapter: 2,ip:192.168.1.18
mysqlMaster_config.vm.provision “shell”, path: “lamp.sh”
mysqlMaster_config.vm.provider “virtualbox” do |vb|
vb.name = “mysqlMaster”
vb.memory = 2048
vb.cpus = 1
vb.customize [“modifyvm”, :id, “–vram”, “16”]
end
end

config.vm.define :mysqlSlave do |mysqlSlave_config|
mysqlSlave_config.vm.hostname = “mysqlSlave”
mysqlSlave_config.vm.network :public_network,bridge: “wlp5s0”,adapter: 2,ip:192.168.1.19
mysqlSlave_config.vm.network :forwarded_port, guest: 10222, host: 2266
mysqlSlave_config.ssh.port = 2266
mysqlSlave_config.ssh.guest_port = 10222
mysqlSlave_config.vm.provision “shell”, path: “lamp.sh”
mysqlSlave_config.vm.provider :virtualbox do |vb|
vb.name = “mysqlSlave”
vb.memory = 2048
vb.cpus = 1
vb.customize [“modifyvm”, :id, “–vram”, “16”]
end
end

TIP

创建多个虚拟机可以把公共用到的东西放在文件的开头定义好,如config.vm.box等。私有的在各自的文件中配置,两个虚拟机的转发端口不能相同

  • 第二种方法:
ruby
# -*- mode: ruby -*-
# vi: set ft=ruby :

servers = {
:hadoop1 => ‘192.168.2.11’,
:hadoop2 => ‘192.168.2.12’,
:hadoop3 => ‘192.168.2.13’,
:hadoop4 => ‘192.168.2.14
}

Vagrant.configure(“2”) do |config|
config.vm.box = “puppetlabs/centos-7.2-64-nocm”
config.vm.box_check_update = false

servers.each do |server_name, server_ip|
config.vm.define server_name do |server_config|
server_config.vm.hostname =#{server_name.to_s}”
server_config.vm.network :private_network, ip: server_ip
server_config.vm.provider “virtualbox” do |vb|
vb.name = server_name.to_s
vb.memory =2048
vb.cpus = 1
end
end
end
end

这里是定义一个hashmap,以key-value方式来存储vm主机名和ip地址。

前面配置了一组vm的hash map,定义一组vm时,使用如下节点遍历。

再遍历servers map,将key和value分别赋值给server_name和server_ip

另外还可以写成如下格式:

ruby
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  (1..3).each do |i|
    config.vm.define "k8s-node#{i}" do |node|
      node.vm.box = "centos7.8.2003"
      node.vm.hostname = "k8s-node#{i}"
      node.vm.network "private_network", ip: "192.168.56.#{90+i}", netmask: "255.255.255.0"
      node.vm.provider "virtualbox" do |vb|
        vb.name = "k8s-node#{i}"
        vb.memory = "512"
        vb.cpus = 1
      end
    end
  end
end

常用命令

  • vagrant box list 查看所有添加的box
  • vagrant box add boxname 添加名称为boxname的box
  • vagrant box remove boxname 删除boxname
  • vagrant up 启动虚拟机,如果只想启动一台,执行:vagrant up mysqlSlave
  • vagrant halt 关闭虚拟机,启动了多个虚拟机时,关闭需指定虚拟机名字
  • vagrant destroy 删除虚拟机,删除多个虚拟机用vagrant destroy mysqlMaster mysqlSlave
  • vagrant status 查看状态
  • vagrant ssh 连接虚拟机,启动多个虚拟机时,ssh连接需指定虚拟机名称
  • vagrant reload reload 会重启当前目录下的所有虚拟机,如需要重启某一个,需指定虚拟机的名称
  • vagrant up –debug >> debug.log
  • vagrant reload –provision 重载vagrantfile

修改box list里的版本号

/home/xujh/.vagrant.d/boxes里面是所有add的box,

然后找到需要修改的Box,如/home/xujh/.vagrant.d/boxes/xujh-VAGRANTSLASH-centos7

修改0目录为180405.0即可

查看修改后的效果:

bash
centos/7 (virtualbox, 1802.01)
xujh/centos7 (virtualbox, 180405.0)

TIP

上面添加版本号的做法只针对需要指定版本号的,如Laravel,默认是不用修改版本号的,如果修改了版本号会报vesion错误

安装vagrant-hostmanager

vagrant plugin install vagrant-hostmanager

vagrant-hostmanager下载地址

常见错误

win10用vagrant up启动虚拟机报错

bash
There was an error while executing VBoxManage, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: [“modifyvm”, “4cc97f5c-450e-41fa-a597-161d611cef07”, “–natpf1”, “ssh,tcp,127.0.0.1,2222,,22”]

Stderr: VBoxManage.exe: error: A NAT rule of this name already exists
VBoxManage.exe: error: Details: code E_INVALIDARG (0x80070057), component NATEngineWrap,
interface INATEngine, callee IUnknown
VBoxManage.exe: error: Context: “AddRedirect(Bstr(strName).raw(), proto, Bstr(strHostIp).raw(),
RTStrToUInt16(strHostPort), Bstr(strGuestIp).raw(), RTStrToUInt16(strGuestPort))”
at line 1851 of file VBoxManageModifyVM.cpp

解决办法:

在virtualbox安装目录中找到vboxmanage.exe,右击属性,设置win8兼容模式运行 或者下载Virtualbox 4.3.12版无兼容性问题

参考

vituralbox 4.3.12版本链接

win10 hostonly问题补丁链接

win0 hostonly问题

配置Vagrant的时候,为了让虚拟机能够和宿主机通信,一般采用的是hostonly的网络设置,但是这样配置之后,虚拟机启动失败,错误提示:

VBoxManage.exe: error: Failed to create the host-only adapter

谷歌之,在官方论坛上找到了对应问题的ticket,这个问题可能依旧是Win10不兼容导致的,不过幸运的是有补丁,打上补丁就搞定了.

win0 hostonly补丁

下次在开启虚拟机之前,首先以管理员模式打开这个补丁就行了。

vagrant up需要选择网卡

bash
==> mysqlMaster: which network to bridge to.
==> mysqlMaster: Available bridged network interfaces:
1) wlp5s0
2) enp3s0
==> mysqlMaster: When choosing an interface, it is usually the one that is
==> mysqlMaster: being used to connect to the internet.
mysqlMaster: Which interface should the network bridge to? 1
==> mysqlMaster: which network to bridge to.
==> mysqlMaster: Available bridged network interfaces:
1) wlp5s0
2) enp3s0
==> mysqlMaster: When choosing an interface, it is usually the one that is
==> mysqlMaster: being used to connect to the internet.
mysqlMaster: Which interface should the network bridge to? 1
==> mysqlMaster: Preparing network interfaces based on configuration…
mysqlMaster: Adapter 1: nat
mysqlMaster: Adapter 2: bridged

解决办法

vim Vagrantfile

mysqlMaster_config.vm.network :public_network, ip: “192.168.1.18”,bridge: “wlp5s0”,adapter: 2, auto_config: false

TIP

wlp5s0替换为你自己的网卡名

ssh连接不上

问题1:不能通过ssh -p 10222 vagrant@192.168.1.16登录

解决办法:

telnet 192.168.1.16 10222,端口通进行下一步检查,端口不通需改ssh配置及关闭防火墙

问题2:提示ssh permission denied

这个一般都是ssh key错误,将本机生成的key上传到虚拟机并改名~/.ssh/authorized_keys即可

问题3: 一直default: Warning: Authentication failure. Retrying…

原因:

  • 先用vagrant ssh-config查看私钥的位置,一般会在本机的当前目录下的/home/xujh/.vagrant.d/insecure_private_key

这个私钥要和你生成的~/.ssh/id_rsa内容是一致的,不一致就会出现上述错误。

  • 另外还可要检查下机器性能,如果负载严重会导致虚拟机开机慢,而且这个验证是有timeout时间的,超过这个时间会报错。

insecure_private_key重新生成触发条件

  • insecure_private_key被删除了

  • vagrant里设置了config.ssh.insert_key,默认是true

config.ssh.insert_key = ‘true’

满足上面的任意条件vagrant就会重新生成insecure_private_key,而且每次生成的文件内容都是同一个。

如果你将~/.ssh/id_rsa内容复制到/home/xujh/.vagrant.d/insecure_private_key问题即可解决,但用此种方法不能

在vagrantfile中设置config.ssh.password,不然会和key冲突。

但还是没明白是怎么生成的。

猜测这个insecure_private_key可能是通过curl下载官网提供的public_key,也就是默认vagrant生成的key或者是从哪里复制的?

解决办法有三种:

  • 第一种:(不推荐)

将用户名和密码写进vagrantfile中,如下

config.ssh.username = “vagrant”

config.ssh.password = “ABCDE!@#$%^”

不建议用这种方式,建议用私钥。

WARNING

需取消etc/ssh/sshd_config里的禁用密码登录设置

  • 第二种方法(推荐)

所以解决办法就是关闭vagrant的安全设置,并指定我们自己生成的私钥地址。

解决办法就是在vagrantfile里添加

config.ssh.insert_key = false

config.ssh.private_key_path = “~/.ssh/id_rsa”

密钥添加到SSH agent中,因为默认只读取id_rsa,为了让SSH识别新的私钥,需将其添加到SSH agent中:

再执行ssh-add ~/.ssh/id_rsa

ssh-add -l查看添加了哪些key

bash
ssh-add -l
2048 SHA256:aFwsCWHjCh4PeOUMvCLPnU46VVGcQ3Tr3AhiAfQr1YY xujh@xujh-Linux (RSA)

如果还不行就删除/home/xujh/.vagrant.d/insecure_private_key,再重新启动

因为设置了config.ssh.insert_key = false,所以不会再生成新的key

  • 第三种方法(官方推荐)

此方法不用在vagrantfile里添加参数,即不用关闭vagrant的安全设置,官方不建议关闭insecure_private_key

只用执行命令:

cat ~/.ssh/id_rsa > ~/.vagrant.d/insecure_private_key

缺点:不能删除insecure_private_key,如果删除了又会报错,又得再重新执行上面的操作,而且不能设置config.ssh.password

ssh_settings

vagrant-ssh-authentication-failure

下载的box的不安全性介绍

vagrant insecure key介绍

Stderr from the command错误

bash
The following SSH command responded with a non-zero exit status
vagrant halt
==> default: Attempting graceful shutdown of VM…
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

shutdown -h now

Stdout from the command:

Stderr from the command:

解决办法思路:

  • 能不能ssh连接,如果不能用vagrant ssh连接,需检查ssh配置及ssh key是否正确,因为不能ssh连接上,所以也就 不能用shutdown -h now命令了

  • 能ssh连接,查看是不是没有sudo权限,给vagrant赋予sudo权限后再试一次,一般都是这种情况

  • 是不是win10,参考问题1

  • 在vagrantfile里添加

config.ssh.sudo_command = “sudo -H -E %c”

参考

Stderr: VBoxManage: error: A NAT rule of this name already exists

打开“设置–网络–高级–端口转发”,然后删除里面的规则即可.

更换默认的用户名vagrant

  • 赋予xujh有sudo权限并无需输入密码

  • 将本地生成的id_rsa.pub上传到vm的/home/xujh/.ssh/下并改名authorized_keys

  • 在本地的vagrantfile里添加 config.ssh.username = “xujh”

  • 替换insecure_private_key内容与~/.ssh/id_rsa一致 cat ~/.ssh/id_rsa > ~/.vagrant.d/insecure_private_key

  • ssh-add ~/.ssh/id_rsa

  • 配置多个ssh keys情况下在~/.ssh/config中添加如下内容:

bash
# coding
Host coding.net
    HostName coding.net
    PreferredAuthentications publickey
    User myjerrysuu@163.com
    IdentityFile ~/.ssh/id_rsa_coding
# github
Host github.com
    HostName github.com
    PreferredAuthentications publickey
    User myjerrysuu@163.com
    IdentityFile ~/.ssh/id_rsa_github
 # vpsgit
 Host blog.xujianhui.cn
    HostName blog.xujianhui.cn
    PreferredAuthentications publickey
    User git
    IdentityFile ~/.ssh/id_rsa_vpsgit
 # raspyPi
 Host raspyPi
    HostName raspyPi
    PreferredAuthentications publickey
    User pi
    IdentityFile ~/.ssh/id_rsa_pi
 # vagrant1
 Host 192.168.1.19
    HostName 192.168.1.19
    PreferredAuthentications publickey
    User echoxu
    Port 10222
    IdentityFile ~/.ssh/id_rsa_vagrant