vagrant安装及配置
vagrant 可与 VirtualBox、VMware、KVM 等虚拟化软件结合,让创建虚拟机变得更加简单。
描述
Creating a VirtualBox Base Box
vagrant是基于vitualBox的,所以请先安装好vitualBox。
在线添加vagrant box
vagrant box add centos/7
提示
centos/7是官方提供的centos7的box
ubuntu官方提供的ubuntu20.04 vagrant box
ubuntu server iso 官方下载,选择Option 2: Manual server installation
在线添加box存在的问题:
安全性差: 在线下载的box的密码和账户都是vagrant,而且pulic key都是一样的
下载慢
解决安全性问题
- 修改vagrant及root的密码
- 修改authorized_keys为你自己生成的id_rsa.pub
- 修改insecure_private_key为你自己生成的id_rsa
- 修改ssh端口号
在本文中会提供上述优化的具体实施方法.
windows中修改vagrant以及virtualbox默认存储目录
1: 修改virtualbox默认存储默认位置:
2: 修改vagrant默认存储位置:
可选择如下两种方法进行修改:
- 用命令行修改
setx VAGRANT_HOME "D:\ProgramFiles\vagrant\.vagrant.d" /M
- 通过环境变量修改
最后将%userprofile%/
下的.vagrant.d
文件移动到D:\ProgramFiles\vagrant\
中即可。
另外还要修改目录的权限:
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配置。
关闭linux防火墙及selinux
systemctl disable firewalld
sed -i ‘s/enforcing/disabled/g’ /etc/selinux/config
安装virtualbox-GuestAdditions
此扩展目的是虚拟机与物理机之间可创建共享目录,功能包括USB、copy、paste等,具体可参考virtualbox官网
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
常见错误
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版无兼容性问题
win0 hostonly问题
配置Vagrant的时候,为了让虚拟机能够和宿主机通信,一般采用的是hostonly的网络设置,但是这样配置之后,虚拟机启动失败,错误提示:
VBoxManage.exe: error: Failed to create the host-only adapter
谷歌之,在官方论坛上找到了对应问题的ticket,这个问题可能依旧是Win10不兼容导致的,不过幸运的是有补丁,打上补丁就搞定了.
下次在开启虚拟机之前,首先以管理员模式打开这个补丁就行了。
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
vagrant-ssh-authentication-failure
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