在vagrant up
进程中,是否可以修改主机上的文件?例如,在主机的/etc/hosts
文件中添加一个条目,以避免必须手动执行此操作?
答案 0 :(得分:54)
解决方案是使用vagrant-hostsupdater
vagrant plugin install vagrant-hostsupdater
此插件会在主机系统上的/ etc / hosts文件中添加一个条目。
在启动和重新加载命令时,它会尝试添加信息(如果不是) 已存在于您的主机文件中。如果需要添加,你会的 被要求输入管理员密码,因为它使用sudo编辑 文件。
暂停,暂停和销毁时,这些条目将被删除。
答案 1 :(得分:5)
好的,所以现在坐在咖啡店旁边的那家伙很可能 ssh到2222端口(编辑:在较新版本的流浪汉上更改,除非你明确启用了外部访问)计算机,使用不安全的密钥登录为vagrant,修改您的Vagrantfile,因为它已安装为读写并由流浪者用户拥有,插入任意ruby代码以在主机环境中运行,现在看起来他们已获得root访问权限主机环境也是如此。辉煌。
我希望人们在他们的开发机器上运行防火墙。
编辑:
因此,在写完上述内容之后,我对Vagrant的作者进行了窃听,默认情况已经更改,因此默认情况下端口2222在外部接口上没有打开。大的改进(虽然仍然需要注意,因为外部访问经常因各种原因而被打开)。
所以,自从发表评论以来我已经努力解决问题,我现在正在减少选票,显然是因为评论过时了。该死的。写作时是正确的。
编辑:
对Steve Buzonas的回应是,如果虚拟机受到任何损害,那么赋予vagrant up
进程提升权限会对主机环境的安全性造成严重威胁,并且能够即使没有一般的root访问权限,修改/ etc / hosts环境文件也很危险。正如我已经指出的那样,vagrant保持VM安全的方法并不是特别严格。
答案 2 :(得分:0)
我不想依赖一些插入流浪汉。它应该是Vagrant的标准功能!!!!直到我使用shell脚本在我的新VM集群中传播VM。关键是:
# 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-addresses。 (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-address或hostname),而是要找出它自己。
产生/ etc / hosts文件(之后 sort / 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
答案 3 :(得分:-2)
以前,我不知道如何修改我的etc / host文件。但是当我重新安装window和无业游民时,此功能消失了。