基本命令
启动虚拟机的工具,依赖virtual box。
基本命令:
- 列表:vagrant box list
- 添加:vagrant box add ubuntu14 Documents/study/vagrant_box/ubuntu14-gnome.box
- 初始化:vagrant init ubuntu14
- 启动:vagrant up
- 登录:vagrant ssh [hostname]
- 关闭:vagrant halt
- 重启:vagrant reload (修改Vagrantfile后需要)
- 状态:vagrant status
- 删除:vagrant destroy
网络配置
各种连接方式下,如何配置Vagrantfile,使得主机可以ping虚拟机?(注意:默认的网络连接方式是:NAT)
-
nat:端口转发
# 主机8080 -> 虚拟机80 config.vm.network "forwarded_port", guest: 80, host: 8080
-
hostonly:私有网络
# 主机与虚拟机间的私有网络,仅宿主机可访问。(私有ip保留地址容易冲突,最简单的方法是允许通过DHCP分配IP) config.vm.network "private_network", type: "dhcp"
-
bridge:共有网络
# 通过路由器,分配一个内网的ip地址,该虚拟机相当于一台真正的主机。(可通过bridge指定 或 启动时选择编号,如:1) config.vm.network "public_network"
以上各项,选择其中一个,都可以完成主机访问虚拟机的需求。
测试:安装httpd。启动:sudo /etc/init.d/apache2 start。
优缺点对比:
- 端口转发:有针对性的把虚拟机的某些端口公布到外网让其他人去访问
- 私有网络:仅允许宿主机访问,安全性非常高,但是团队成员不能操作
- 共有网络:拥有路由器分配的独立内网ip,可以看成一台正真的主机
注意:私有网络的虚拟机,宿主机别拨vpn。因为保留的私有ip地址无法联网。
共享文件夹
修改Vagrantfile中的配置 ==> config.vm.synced_folder “~/share", “/home/vagrant/share”
注意:仅仅如此不会生效,需要配置无密码sudo
无密码sudo配置
Vagrant的许多方面都希望默认的SSH用户可以配置无密码的sudo。这允许Vagrant配置网络,挂载同步文件夹,安装软件等。
安装sudo后,配置它(通常使用visudo)允许“vagrant”用户的无密码sudo。这可以通过配置文件末尾的以下行来完成:
vagrant ALL=(ALL) NOPASSWD: ALL
主机间建立ssh信任
实现:ssh vagrant@172.28.128.3 免密登录。
# 在主机A上生成公私钥
$ ssh-keygen -t rsa ------------------------------------------------------ 检查:ssh-add -L;添加:ssh-add ~/.ssh/id_rsa
# 与主机B建立关系
$ ssh-copy-id -i nameB@machineB
# 手动方式,和ssh-copy-id xx 等效
cat $HOME/.ssh/id_rsa.pub | ssh vagrant@192.168.59.2 'cat >> $HOME/.ssh/authorized_keys'
# 请注意,OpenSSH对文件权限非常挑剔。因此,确保~/.ssh具有0700权限,授权密钥文件具有 0600权限。
sudo chmod 0700 ~/.ssh/
sudo chmod 0600 ~/.ssh/authorized_keys
备注:root用户执行ssh-keygen,生成的文件在/root/.ssh下。
如果想将root下的id_rsa.pub复制到machineB的root权限的文件夹下,需要手动将/root/.ssh/authorized_keys追加到machineB:/root/.ssh/authorized_keys。
vagrant ssh 认证失败
实现:vagrant ssh 免密登录。
1、修改insecure_private_key
$ vagrant ssh-config ==> IdentityFile ~/.vagrant.d/insecure_private_key
# 在Vagrantfile中配置
config.ssh.private_key_path = "~/.ssh/id_rsa”
config.ssh.forward_agent = true
# 或者,用个人系统私钥的内容更改insecure_private_key
2、建立ssh信任(详见上)
vagrant 集群
创建并编辑Vagrantfile,执行vagrant ssh。
常见问题:
- 同步文件夹失败:配置无密码sudo,再执行vagrant reload
- vagrant ssh 认证失败,导致下面的虚拟机无法创建:ctrl+c,然后实现 vagrant ssh 免密登录,再vagrant up
如果以后搬家,ip改变了,几处需要修改: - ssh信任需要重新建立,因为known_hosts不认识了
- 修改ip-主机映射:vi /etc/hosts
注意:传统虚拟机节点占用资源过多,在mac上模拟节点最好还是选用docker。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。