62

我一直在使用 Capistrano 开发自动化部署,并使用 Vagrant 作为我的测试虚拟服务器。

问题是,我需要 Vagrant 的 IP 才能“ssh融入其中”。

我尝试ifconfig并获得了 IP,但看起来它不是确切的流浪 IP。

任何人都可以帮我获得 Vagrant IP 吗?

4

13 回答 13

53

默认情况下,vagrant box 没有任何 IP 地址。为了找到 IP 地址,您只需在Vagrantfilethen 调用中分配 IP 地址vagrant reload

如果您只需要从主机访问 vagrant 机器,那么您只需要设置“私有网络”即可。取消注释 default 中的相应行Vagrantfile,或添加此代码段。如果您希望您的虚拟机出现在172.30.1.5它上面,则如下所示:

config.vm.network "private_network", ip: "172.30.1.5"

了解有关专用网络的更多信息。https://www.vagrantup.com/docs/networking/private_network.html

如果您需要在主机之外访问 vagrant,例如针对 iOS 或 Android 等移动设备进行开发,则必须启用公共网络,您可以使用静态 IP(例如192.168.1.10DHCP)或 DHCP。

config.vm.network "public_network", ip: "192.168.1.10"

了解有关配置公共网络的更多信息https://www.vagrantup.com/docs/networking/public_network.html

于 2016-09-28T23:31:46.473 回答
40

我发现我确实需要 IP 才能/etc/hosts在主机系统上配置以指向新 VM 上的服务。

这是我用来获取 IP 的粗略版本。让 Vagrant 发挥它的 SSH 魔法,向虚拟机询问它的地址;根据您的需要进行调整。

new_ip=$(vagrant ssh -c "ip address show eth0 | grep 'inet ' | sed -e 's/^.*inet //' -e 's/\/.*$//'")

我刚刚在Vagrant Docs中找到了这个。看起来他们认为这是一种有效的方法:

这将自动从保留的地址空间分配一个 IP 地址。可以通过使用 vagrant ssh SSH 进入机器并使用适当的命令行工具(例如 ifconfig)找到 IP 地址来确定 IP 地址。

于 2014-03-11T18:15:44.777 回答
29

跑:

vagrant ssh-config > .ssh.config

然后在config/deploy.rb

role :web, "default"     
role :app, "default"
set :use_sudo, true
set :user, 'root'
set :run_method, :sudo

# Must be set for the password prompt from git to work
default_run_options[:pty] = true
ssh_options[:forward_agent] = true
ssh_options[:config] = '.ssh.config'
于 2013-02-14T17:51:45.753 回答
25

打开一个终端,cd 到你的 Vagrantfile 的路径并写下这个

(Linux)

vagrant ssh -c "hostname -I | cut -d' ' -f2" 2>/dev/null

(OS X)

vagrant ssh -c "hostname -I | cut -d' ' -f2" 2>/dev/null | pbcopy

Linux 的命令也适用于 Windows。我没有办法测试,对不起。

来源:https ://coderwall.com/p/etzdmq/get-vagrant-box-guest-ip-from-host

于 2016-12-20T21:57:18.247 回答
17

我为此开发了一个小型vagrant-address插件。它简单、跨平台、跨供应商,并且不需要编写脚本。

https://github.com/mkuzmin/vagrant-address

于 2015-02-11T18:30:41.467 回答
8

在终端类型中:

ip addr show
于 2016-08-02T15:46:22.630 回答
5

我在 VagrantFile 做过:

REMOTE_IP = %x{/usr/local/bin/vagrant ssh-config | /bin/grep -i HostName | /usr/bin/cut -d\' \' -f4}
run "ping #{REMOTE_IP}"

如您所见,我使用了 "%x{}" ruby​​ 函数。

于 2015-02-03T22:48:39.820 回答
4

终止打开的连接vagrant ssh将显示地址,因此可以执行虚拟或空命令:

$ vagrant ssh -c ''
Connection to 192.168.121.155 closed.
于 2019-04-14T22:05:19.120 回答
1

我们使用 VirtualBox 作为提供者,对于虚拟盒子,您可以使用它VBoxManage来获取 IP 地址

VBoxManage guestproperty get <virtual-box-machine-name> /VirtualBox/GuestInfo/Net/1/V4/IP
于 2020-01-02T18:50:52.567 回答
0

我需要知道这一点来告诉用户要向其主机的主机文件添加什么。这仅使用 bash 在 vagrant 中对我有用:

external_ip=$(cat /vagrant/config.yml | grep vagrant_ip | cut -d' ' -f2 | xargs)
echo -e "# Add this line to your host file:\n${external_ip}     host.vagrant.vm"
于 2018-04-07T13:09:37.273 回答
0

因为我还没有在这里看到它......当你vagrant ssh进入盒子时,我意识到它实际上告诉你接口的IP地址。你可以在那里得到它。例如。

 {~/Documents/jupyterhub-ansible} (features *%)$  vagrant ssh
Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-50-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Wed May 22 12:00:34 UTC 2019

  System load:  0.12              Processes:             101
  Usage of /:   56.5% of 9.63GB   Users logged in:       0
  Memory usage: 19%               IP address for enp0s3: 10.0.2.15
  Swap usage:   0%                IP address for enp0s8: 192.168.33.10


10 packages can be updated.
1 update is a security update.


Last login: Wed May 22 12:00:04 2019 from 192.168.33.1
vagrant@ubuntu-bionic:~$ 

在我的流浪文件中,我分配了这样的地址:

config.vm.network "private_network", ip: "192.168.33.10"

如你所见, IP address for enp0s8: 192.168.33.10

于 2019-05-22T12:10:56.623 回答
0

我遇到了这样的事情,所以我在 Vagrant 框中添加了运行 bash 脚本,并在主机文件夹中输出公共 IP 地址文件。

在 Vagrantfile 中添加这个

...
  config.vm.provision "shell", path: "public-ip.sh"
  config.vm.synced_folder '.', '/vagrant'
...

在同一个 Vagrantfile 文件夹中创建 bash 脚本名称 public-ip.sh


#!/bin/bash 

# change eth1 to your desired network interface, in my vagrantfile i have first NAT and second is bridge dhcp network and i want to know random dhcp IP.

box_ip=$(ip address show eth1 | grep 'inet ' | sed -e 's/^.*inet //' -e 's/\/.*$//')" 

echo "$box_ip" | tee public_ip.txt

echo "add box ip to your host machine /etc/hosts entry so you can connect the box using box hostname"


当您执行 vagrant up 时,您将看到公共 ip 或私有 ip 框的 vagrant 输出,您可以在任何时候使用将其添加到主机条目

于 2021-04-01T07:58:19.123 回答
-1

我知道这篇文章很旧,但我想对此补充几点!

你可以试试

vagrant ssh -c "ifconfig | grep inet" hostname 

如果您为您的客人单独设置了一个名字,这将很容易!

于 2018-04-19T17:37:04.900 回答