2013-02-14 160 views
25

我一直在開發一個使用Capistrano的自動化部署,並使用Vagrant作爲我的測試虛擬服務器。如何找到Vagrant IP?

事情是,我需要流浪的IP到「ssh」。

我試過ifconfig並得到了IP,但它看起來並不是確切的流浪IP。

任何人都可以幫助我獲得Vagrant IP嗎?

+1

只是一個提醒,任何人讀這... ssh到一個流浪漢框的方式,就是你所在的位置Vagrantfile存在的文件夾中,並且只需要輸入'無業遊民ssh'。不需要IP地址。但是,爲了編寫腳本或創建/ etc/hosts條目,這裏的答案特別有用,[this one](https://stackoverflow.com/a/41251906/1028855)。 – gbe 2017-11-04 05:12:24

+0

在Windows窗口中獲得答案也很有趣 – 2017-11-16 05:43:07

回答

16

運行:

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' 
+6

不幸的是,'vagrant ssh-config'不顯示虛擬機的真正SSH配置。使用該IP /端口只會給你錯誤「名稱或服務未知」 – Cerin 2016-02-23 19:55:16

+3

爲什麼當這個答案顯然是錯的時候接受了?所有這個命令的作用就是向你顯示在你的主機上使用的配置文件,以便進入流浪盒。如果您在Vagrant文​​件中使用'private_network'設置,並且想要查找您的虛擬機的IP,以便您可以對其進行HTTP請求或其他任何操作,那麼如下所述,它似乎是目前唯一的方法,並使用'ifconfig'或其他東西來查明。 – 2016-12-20 21:49:05

+0

我在一段時間內沒有使用過流浪漢,但在我使用它的那一天,它正在工作:) – mpapis 2016-12-28 12:06:54

30

我發現我需要的IP,以在主機系統上配置/etc/hosts在服務上的新指向VM。

下面是我用來獲取IP的粗略版本。讓Vagrant執行SSH魔術並向VM發送地址;調整您的需求。

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

我剛剛發現這個在Vagrant Docs。看起來他們認爲這是一個有效的方法:

這將自動分配一個IP地址從保留地址 空間。 IP地址可以通過使用vagrant ssh來確定,將SSH 插入本機並使用相應的命令行工具找到 的IP,如ifconfig。

+0

該命令導致包含換行符,當變量用於另一個命令如捲曲(我正在使用OSX)。這似乎效果更好:'$(vagrant ssh -c「ip address show eth0」2>/dev/null | sed -ne'/ inet/s/\ s \ + inet \([^ \ /] \ + \ )。* \ r/\ 1/p')' – jamesbishopp 2015-06-15 18:00:41

+0

有趣的是,當我發佈這篇文章時,我在OSX上,雖然我有一段時間沒有使用流浪漢,也許有什麼改變?感謝分享! – quickshiftin 2015-06-15 18:12:37

+3

刪除該換行符的更好方法是簡單地添加'| tr -d'\ n'就像這樣:'vagrant ssh -c「ip address show eth0 | grep'inet'| sed -e's /^.* inet //'-e's /\/.*$ //'| tr -d'\ n'「2>/dev/null' – geowa4 2015-08-10 12:51:51

4

我確實在VagrantFile:

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

正如你所看到的,我用 「%X {}」 紅寶石功能。

4

在終端類型:

ip addr show 
+0

ip地址顯示<> – emecas 2016-08-02 16:21:28

+2

我看到了大量的輸出。我怎麼知道IP在所有輸出中的含義? – Ryan 2017-09-22 22:27:22

15

默認情況下,一個流浪漢框沒有任何IP地址。爲了查找IP地址,你只要將你的Vagrantfile的IP地址,然後調用vagrant reload

如果你只是需要從只有主機訪問一個無業遊民機,設立了「專用網」是你所需要的。取消註釋默認Vagrantfile中的相應行,或添加此片段。如果你希望你的虛擬機出現在172.30.1.5這將是如下:

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

瞭解更多關於私有網絡。https://www.vagrantup.com/docs/networking/private_network.html

如果您需要流浪漢是您的主機外部訪問,例如針對移動設備,如iOS或Android開發,您必須啓用公共網絡,可以使用靜態IP,如192.168.1.10,或DHCP。

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

詳細瞭解如何配置公共網絡https://www.vagrantup.com/docs/networking/public_network.html

6

開放終端,來到你的Vagrantfile的路徑和寫這篇

(Linux)的 遊民SSH -c「主機名-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

+1

這應該是被接受的答案。它很簡單,可以編寫腳本,並返回流浪箱使用的實際IP地址。 – gbe 2017-11-04 05:07:45