web-dev-qa-db-ja.com

vagrant upのホストマシンに/ etc / hostsエントリを追加する

vagrant upプロセス中にホストマシン上のファイルを変更することは可能ですか?たとえば、ホストマシンの/etc/hostsファイルにエントリを追加して、これを手動で行う必要をなくしますか?

39

解決策は vagrant-hostsupdater

vagrant plugin install vagrant-hostsupdater

このプラグインは、ホストシステムの/ etc/hostsファイルにエントリを追加します。

Upおよびreloadコマンドで、hostsファイルに存在しない情報を追加しようとします。追加する必要がある場合は、Sudoを使用してファイルを編集するため、管理者パスワードの入力を求められます。

停止、一時停止、破棄すると、これらのエントリは再び削除されます。

54

OK、コーヒーショップで隣に座っている人は、 ポート2222へのssh (編集:明示的に外部アクセスを有効にしない限り、vagrantの新しいバージョンで変更されます)コンピューターで、安全でないキーを使用してvagrantとしてログインし、Vagrantfileを変更します(読み取り/書き込みがマウントされ、vagrantユーザーが所有しているため、任意のRubyコードをホスト環境で実行すると、ホスト環境でもルートアクセスができるようになります。ブリリアント。

開発マシンでファイアウォールを実行することを願っています。

編集:

したがって、上記を書いた後、Vagrantの作者にバグを報告しました。デフォルトは、ポート2222が外部インターフェイスでデフォルトで開かれないように変更されました。大きな改善(ただし、外部アクセスはさまざまな理由で頻繁に開かれるため、まだ注意が必要です)。

そのため、このコメントを行ってから状況を修正するために努力しましたが、コメントが古くなっているように見えるので、今では票を落としています。くそー。書いたときは正しかった。

編集:

Steve Buzonasへの対応として、ポイントは、仮想マシンが危険にさらされる可能性がある場合、vagrant upプロセスに許可を与えることは、ホスト環境のセキュリティに対する重大なリスクを表し、また、/etc/hosts環境ファイルは、一般的なルートアクセスがなくても危険です。私が指摘したように、VMを安全に保つための迷走者のアプローチは特に厳密ではありません。

5
mc0e

浮浪者にプラグインを頼りたくありません。 Vagrantの標準機能です!!!!それまでは、シェルスクリプトを使用して、新しい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はマスターのIPアドレスですVM。(pingが成功しないまでIPADDRESS = IPADDRESS + 1)

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`

そして、pingが成功しなくなるまで次のIPアドレスをループします。私は何か(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
0
Peter de Zwart

以前は、etc/Hostファイルを編集する方法を知りませんでした。しかし、windowとvagrantを再インストールすると、この機能は消えました。

0
Tan Nguyen