42

在此过程中是否可以修改主机上的文件vagrant up?例如,向主机/etc/hosts文件添加一个条目以避免必须手动执行此操作?

4

4 回答 4

58

解决方案是使用vagrant-hostsupdater

vagrant plugin install vagrant-hostsupdater

此插件在主机系统上的 /etc/hosts 文件中添加一个条目。

在启动和重新加载命令时,它会尝试添加信息,如果它不存在于您的主机文件中。如果需要添加,系统会要求您输入管理员密码,因为它使用 sudo 来编辑文件。

在停止、暂停和销毁时,这些条目将再次被删除。

于 2013-05-18T13:46:16.710 回答
5

好的,所以现在坐在咖啡店旁边的那个人很可能会在您的计算机上通过ssh 连接到端口 2222(编辑:在较新版本的 vagrant 上更改,除非您明确启用外部访问),使用不安全的密钥以 vagrant 身份登录,修改您的 Vagrantfile,因为它以读写方式安装并由 vagrant 用户拥有,插入任意 ruby​​ 代码以在主机环境中运行,现在看起来他们在主机环境中也具有 root 访问权限。杰出的。

我希望人们在他们的开发机器上运行防火墙。

编辑:

所以写完上面,我就bug了Vagrant的作者,修改了默认,对外接口默认不开放2222端口。很大的改进(尽管仍然需要小心,因为外部访问经常由于各种原因而开放)。

因此,自从发表此评论以来,我一直在努力解决问题,但我现在投了反对票,显然是因为评论已过时。该死。写的时候是对的。

编辑:

作为对 Steve Buzonas 的回应,关键是如果虚拟机有任何可能受到威胁,那么授予vagrant up进程提升的权限会对主机环境的安全性构成严重风险,并且还能够修改 /etc/hosts 环境文件是危险的,即使没有一般的 root 访问权限。正如我所指出的,vagrant 保持虚拟机安全的方法并不是特别严格。

于 2013-06-05T14:05:49.920 回答
0

我不想依赖一些插件来流浪。它应该是 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
于 2018-05-12T11:37:50.450 回答
-2

以前我不知道如何流浪编辑我的 etc/host 文件。但是当我重新安装window和vagrant时,这个功能就消失了。

于 2019-01-03T02:37:22.820 回答