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

提示

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默认存储位置:

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

  • 用命令行修改
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等配置。

提示

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

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

安装依赖包

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

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

更新yum源

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的权限

注意

这里没有使用默认的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

提示

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下载地址:

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安装成功

[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/

提示

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

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

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

提示

必须保证.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

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

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

vim /etc /ssh/sshd_config

增加如下记录:

UseDNS no
GSSAPIAuthentication no

service sshd restart 重启 SSH 服务

注意

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

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

将虚拟机导出为Box文件

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

mkdir vagrant //名称随便取

cd vagrant

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

提示

执行完成后在当前目录会生成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环境

# -*- 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

提示

vagrant主机名最好是小写

简单解释下Vagrant文件

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文件,内容如下

# -*- 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

提示

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

  • 第二种方法:
# -*- 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

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

# -*- 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即可

查看修改后的效果:

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

提示

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

安装vagrant-hostmanager

vagrant plugin install vagrant-hostmanager

vagrant-hostmanager下载地址

常见错误

win10用vagrant up启动虚拟机报错

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需要选择网卡

==> 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

提示

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!@#$%^”

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

注意

需取消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

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错误

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中添加如下内容:

# 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
上次更新:
贡献者: iEchoxu