在此过程中是否可以修改主机上的文件vagrant up
?例如,向主机/etc/hosts
文件添加一个条目以避免必须手动执行此操作?
4 回答
解决方案是使用vagrant-hostsupdater
vagrant plugin install vagrant-hostsupdater
此插件在主机系统上的 /etc/hosts 文件中添加一个条目。
在启动和重新加载命令时,它会尝试添加信息,如果它不存在于您的主机文件中。如果需要添加,系统会要求您输入管理员密码,因为它使用 sudo 来编辑文件。
在停止、暂停和销毁时,这些条目将再次被删除。
好的,所以现在坐在咖啡店旁边的那个人很可能会在您的计算机上通过ssh 连接到端口 2222(编辑:在较新版本的 vagrant 上更改,除非您明确启用外部访问),使用不安全的密钥以 vagrant 身份登录,修改您的 Vagrantfile,因为它以读写方式安装并由 vagrant 用户拥有,插入任意 ruby 代码以在主机环境中运行,现在看起来他们在主机环境中也具有 root 访问权限。杰出的。
我希望人们在他们的开发机器上运行防火墙。
编辑:
所以写完上面,我就bug了Vagrant的作者,修改了默认,对外接口默认不开放2222端口。很大的改进(尽管仍然需要小心,因为外部访问经常由于各种原因而开放)。
因此,自从发表此评论以来,我一直在努力解决问题,但我现在投了反对票,显然是因为评论已过时。该死。写的时候是对的。
编辑:
作为对 Steve Buzonas 的回应,关键是如果虚拟机有任何可能受到威胁,那么授予vagrant up
进程提升的权限会对主机环境的安全性构成严重风险,并且还能够修改 /etc/hosts 环境文件是危险的,即使没有一般的 root 访问权限。正如我所指出的,vagrant 保持虚拟机安全的方法并不是特别严格。
我不想依赖一些插件来流浪。它应该是 Vagrant 的标准功能!!!!在那之前,我使用 shell 脚本在我的新虚拟机集群中传播虚拟机。关键线是:
# Obtain the hostkey based on the IP-address and add it to the known_host list
ssh-keyscan -t ecdsa ${START}.${OFFSET} >> /home/vagrant/.ssh/known_hosts
# obtain the hostname, because you might not know it yet, with the IP address:
EXTERNAL_HOSTNAME=`ssh ${START}'.'${OFFSET} 'hostname'`
# obtain the key ot the new other VM based on hostname and also add to known_hosts
ssh-keyscan -t ecdsa ${EXTERNAL_HOSTNAME} >> /home/vagrant/.ssh/known_hosts
# so now you have the IP address and the corresponding hostname
# add to /etc/hosts without being asked for "yes/no"
echo ${START}'.'${OFFSET}' '${EXTERNAL_HOSTNAME} >> /etc/hosts
其中 IPADRRESS 是集群中的主 VM 的 IP 地址,其中有多个从节点 VM 以及后续的 IP 地址。(IPADDRESS=IPADDRESS + 1 直到没有成功 ping)
IPADDRESS=`ip addr show eth1 | grep 'inet ' | cut -d ' ' -f 6 | cut -d '/' -f1`
START=`echo ${IPADDRESS} | cut -d '.' -f1,2,3`
OFFSET=`echo ${IPADDRESS} | cut -d '.' -f4`
然后我循环遍历下一个 IP 地址,直到不再成功 ping。我不想硬编码任何东西(IP 地址或主机名),而是要找出自己。
生成的 /etc/hosts 文件(排序后 /etc/hosts | uniq > /tmp/hosts.uniq && sudo sh -c 'mv /tmp/hosts.uniq /etc/hosts' :
[vagrant@master ~]$ cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
127.0.0.1 master.RHEL70.local master
192.168.1.50 master.RHEL70.local
192.168.1.51 node01.RHEL70.local
192.168.1.52 node02.RHEL70.local
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
以前我不知道如何流浪编辑我的 etc/host 文件。但是当我重新安装window和vagrant时,这个功能就消失了。