如何找到可以SSH进入的KVM虚拟机的IP地址?


30

我已按照本指南(在Ubuntu 11.10上使用KVM虚拟化)在Ubuntu 11.10服务器上设置我的KVM(虚拟机软件)。但是,在创建虚拟机时,我没有设置虚拟机的IP地址,而是使用了:

vmbuilder kvm ubuntu --suite=oneiric --flavour=virtual --arch=amd64 --mirror=http://de.archive.ubuntu.com/ubuntu -o --libvirt=qemu:///system --ip=192.168.0.101 --gw=192.168.0.1 --part=vmbuilder.partition --templates=mytemplates --user=administrator --name=Administrator --pass=howtoforge --addpkg=vim-nox --addpkg=unattended-upgrades --addpkg=acpid --firstboot=/var/lib/libvirt/images/vm1/boot.sh --mem=256 --hostname=vm1 --bridge=br0

我曾经使用过:(我从命令行中删除了“ --ip = 192.168.0.101 --gw = 192.168.0.1”)

vmbuilder kvm ubuntu --suite=oneiric --flavour=virtual --arch=amd64 --mirror=http://de.archive.ubuntu.com/ubuntu -o --libvirt=qemu:///system --part=vmbuilder.partition --templates=mytemplates --user=administrator --name=Administrator --pass=howtoforge --addpkg=vim-nox --addpkg=unattended-upgrades --addpkg=acpid --firstboot=/var/lib/libvirt/images/vm1/boot.sh --mem=256 --hostname=vm1 --bridge=br0

我已经按照指导说明设置了网桥,并且新VM的接口已连接到网桥。

我假设KVM将通过DHCP分配我的VM,但是我没有有关新VM的IP地址的信息,在哪里可以找到该VM的IP地址和到新VM的SSH?谢谢。

[注意:我设法在不知道VM的IP地址的情况下登录了VM。使用“ 带有X图形转发的Xming + SSH ”,但是没有为我的VM分配DHCP IP地址,除了上述问题,我在这里还有另一个问题:如何在我的VM上启用DCHP,以便当我使用Xming通过“ virt浏览器”,我至少可以看到我的IP地址在那里。]


我已经找出问题并解决了。在/ etc / network / interfaces中,我删除了“ network”和“ broadcast”信息,并且DHCP在我的客户机VM上运行。现在,我可以进入我的访客虚拟机了。我猜我的“网络XXX.XXX.XXX.XXX”或“广播XXX.XXX.XXX.XXX”是错误的。该指南对于这种设置仍然有效,只是在设置自己的网络环境时要小心。问题已经解决了!!!
仙林2012年

1
libvirt现在有两个命令:domifaddr和net-dhcp-leases
Nehal J Wani

请参考链接,您将找到答案:

Answers:


20

您可以运行arp -n以查看您的虚拟机选择了哪个IP。这样,您无需登录来宾vm并输入ifconfig

下面的博客有更多详细信息,并包括一个perl脚本,该脚本可自动查找虚拟机的地址。

提示:查找虚拟机的IP地址


很简单。太好了…
Indika K

1
如果链接断开,请转到xyz网页,答案不好,请发布“完整答案”
FreeSoftwareServers

31

尝试这个:

virsh net-list
virsh net-dhcp-leases <net-name>   <--- net-name from above command

如果您知道MAC地址,也可以使用以下格式:

virsh net-dhcp-leases <net-name> --mac <mac-address>

可以从dumpxml命令中找到MAC地址。请参阅是否可以确定kvm主机中哪个虚拟接口属于虚拟机?


5
这是正确的答案。无需任何破解即可工作。非常感谢。
chmac

1
应该是“ virsh net-list” ...“ net”和“ list”之间没有空格。否则,这将完美工作。
戴夫·海因

@DaveHein感谢您的纠正。更新了答案。
拉胡尔

如果您得到空结果,请尝试使用sudo
Freedom_Ben

6

我想这是一个古老的问题,但是virsh如果您使用的是nat或桥接专用网络,则当前版本会使此操作变得容易得多。我有一个steak在(路由)专用网络(又称为“ NAT”)上命名的虚拟机。只需两个命令即可找到内置机制分配的IP:

$ sudo virsh list
 Id    Name                           State
----------------------------------------------------
 21    steak                          running

$ sudo virsh domifaddr steak
 Name       MAC address          Protocol     Address
-------------------------------------------------------------------------------
 vnet0      76:0c:28:ab:0e:ee    ipv4         10.14.1.1/24

我还有另一个VM(eggs),它桥接到常规网络(连接到虚拟机管理程序主机上的桥接设备)。Libvirt没有为其分配地址;它从网络的DHCP服务器获取地址,在我的情况下,该服务器还会更新动态DNS。当domifadd此VM 没有输出时,这是一种可能的可能性。因此,您基本上必须像在其他任何计算机上一样找到地址-在arp表中找到它可能是最简单的-这意味着ip neighbour现在(arp已弃用并且不再存在于某些发行版中)。幸运的是,对于我们这些不使用额外拼音进行拼写的人,您还可以使用较短的版本,例如ip neighip n(或ip neighbor)。;)在下面,我用于domiflist查找MAC地址(请注意,它已连接到br0 在“源”列中),然后在arp表中找到该内容。

$ sudo virsh domifaddr eggs
 Name       MAC address          Protocol     Address
-------------------------------------------------------------------------------

$ sudo virsh domiflist eggs
Interface  Type       Source     Model       MAC
-------------------------------------------------------
vnet0      bridge     br0        virtio      52:54:00:2c:ac:ee

$ ip neigh | grep -i 52:54:00:2c:ac:ee
192.168.0.226 dev br0 lladdr 52:54:00:2c:ac:ee REACHABLE
$ host eggs
eggs.home.domain.com has address 192.168.0.226

5

虚拟机列表:

virsh list

从名称获取虚拟机MAC

virsh domiflist debian8

用grep扫描您的vm子网(MAC必须大写)

nmap -sP 10.0.0.0/24 | grep 52:54:00:FD:1F:92 -B 3 

结果

Nmap scan report for 10.0.0.173
Host is up (0.0012s latency).
MAC Address: 52:54:00:FD:1F:92 (QEMU Virtual NIC)

4

如果您具有对VM的控制台访问权限,则只需ifconfig -a在guest 虚拟机上运行即可。当您在那里时,请检查以确保来宾服务器确实具有网络连接并且sshd正在运行。

如果您没有控制台访问权限,则很可能是IP地址是由DHCP分配的。查找另一台也获得DHCP分配的计算机(可能是主机服务器),然后将1添加到该地址并尝试。实际上,请尝试下5或6个地址。如果这不起作用,则您要么有一个大型活动网络,并且需要尝试子网中的每个IP地址,要么存在较低级别的网络问题,例如无法路由到主机或具有相同MAC地址的两个主机。也许您只是没有去sshd跑步。

使用控制台是解决此问题的最简单方法。


我实际上设法通过Xming Server +“ virt-viewr”命令连接到我的VM。我在虚拟机中时发现没​​有为来宾分配IP。如何使DHCP工作?我需要更改任何XML文件吗?
仙林

嗨,迈克尔,如果我允许您访问我的服务器,您认为可以为我提供帮助吗?我尝试使用DHCP和静态IP,但访客VM没有获得任何IP,但是我的主机服务器仍然可以访问Internet。谢谢。
仙林2012年

3

要查看虚拟机的IP地址,请运行:

$ arp -n

如果您的系统上未安装arp,则只需安装该net-tools软件包。


2

可以通过内置的VNC与进行连接virt-manager,然后进行tty登录,并通过查找IP地址ifconfig eth0。通常为eth0,除非另行指定。


2

sudo nmap -sn 192.168.5.0/24 | awk '/Nmap scan report/{printf $5;printf " ";getline;getline;print $3;}' | fgrep -if <(virsh list --name | grep . | while read n; do virsh domiflist $n; done | grep --only-matching ..:..:..:..:..:..)

扫描子网。用awk解析输出以获得像这样的行<IP> <MAC>。然后使用虚拟机的MAC列表在其中进行grep。

通过列出所有VM(还删除空行),然后virsh domiflist对它们中的每一个进行处理,然后grepping一个看起来像MAC的模式来获得MAC列表。

资料来源:

https://serverfault.com/a/669862/284568


0

如果您有QEMU(VM仿真器),请转到“ i”按钮并检查与“ Br0”网络关联的网卡。记下NIC的mac地址。现在登录到您的VM->打开终端->在终端中输入:“ ifconfig”命令->记录与您先前记下的Mac地址相关的IP地址。

您可以使用Putty或任何ssh客户端使用上一步中记下的IP登录到VM。


0

我将我的KVM guest虚拟机放在br0接口上,所以我认为它有点不同,但这是我制作的两个脚本。

请注意,要使用ARP,首先需要在Arp表中包含MAC。因此,最好使用fping对整个网络进行快速ping(大约需要2秒)。这样可以确保您的Arp缓存是最新的。

apt-get install fping
yum install fping

通过查找单个访客IP:

cat << 'EOF' > ~/findip.sh
#!/bin/bash
#FreeSoftwareServers.com

echo "Finding All Active IP's in Network via single Ping"
sleep 2s

fping -a -g 192.168.1.0/24
#nmap -sn 192.168.1.0/24

echo "Please Enter the Exact Name of the VM Guest:"

read guestname

arp -na | awk -v mac=$(virsh domiflist $guestname | awk '$2=="bridge"{print $NF}') '$0 ~ " at " mac {gsub("[()]", "", $2); print $2}'
EOF
chmod +x ~/findip.sh
sudo sh -c 'echo "alias findguestip=~/findip.sh" >> ~/.bashrc'
source ~/.bashrc
findguestip

通过以下方式查找所有访客IP:

cat << 'EOF' > ~/findallips.sh
#!/bin/bash
#FreeSoftwareServers.com

echo "Finding All Active IP's in Network via single Ping"
sleep 2s

fping -a -g 192.168.1.0/24
#nmap -sn 192.168.1.0/24

domainlog=/tmp/domain.log

virsh list --all | grep running |  cut -c 8- >> "$domainlog"

sed -i 's/running*//g' "$domainlog"

readarray domain < "$domainlog"

for i in "${domain[@]}"
do
ip="$(arp -na | awk -v mac=$(virsh domiflist $i | awk '$2=="bridge"{print $NF}') '$0 ~ " at " mac {gsub("[()]", "", $2); print $2}')"
echo "Hostname : $i IP : $ip"
done
rm "$domainlog"
EOF
chmod +x ~/findallips.sh
sudo sh -c 'echo "alias findallips=~/findallips.sh" >> ~/.bashrc'
source ~/.bashrc
findallips

我最终通过arp-scan解决了这个问题。例如:sudo arp-scan --interface = br0 --localnet --bandwidth = 8192000 --numeric --retry = 1,这是我想主动搜索的时间。我使用addrwatch坐在后台,为我积累了一个mac / ip地址映射。
杜加尔公爵


0
  1. 获取您的域列表 virsh list --all

    virsh # list --all
    
    2     webserver_01                   running
    
  2. 使用virsh domiflist yourDomainId,通过域ID或名称获取域接口列表,您将看到域接口的MAC地址。

    virsh # domiflist 2
    
    bridge     br0        virtio      52:54:00:42:be:96
    
  3. 使用通过nmap扫描您的LAN nmap -sn 192.168.1.0/24|grep -i '52:54:00:42:be:96' -B 2,您将获得IP地址。

    [root@kvm-master ~]# nmap -sn 192.168.1.0/24|grep -i '52:54:00:42:be:96' -B2 
    
    Nmap scan report for bogon (192.168.1.210)
    Host is up (0.00013s latency).
    MAC Address: 52:54:00:42:BE:96 (QEMU Virtual NIC)
    

0

一个使用qemu-guest代理的不错的解决方案。

a)配置您的虚拟机以使用qemu-guest代理在主机上:使用virt-manager添加一个“ qemu-guest-agent”通道非常简单。在我的情况下,机器称为“ Debian”,修改后的xml类似于这个。

 <channel type='unix'>
      <source mode='bind' path='/var/lib/libvirt/qemu/channel/target/domain-3-debian/org.qemu.guest_agent.0'/>
      <target type='virtio' name='org.qemu.guest_agent.0' state='connected'/>
      <alias name='channel1'/>
      <address type='virtio-serial' controller='0' bus='0' port='2'/>
    </channel>

b)在来宾上安装qemu-guest-agent并确保已启动

apt -y install qemu-guest-agent

systemctl status qemu-guest-agent.service
● qemu-guest-agent.service - LSB: QEMU Guest Agent startup script
   Loaded: loaded (/etc/init.d/qemu-guest-agent; generated; vendor preset: enabled)
   Active: active (running) since Sat 2019-01-26 09:35:57 CET; 3s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 1624 ExecStop=/etc/init.d/qemu-guest-agent stop (code=exited, status=0/SUCCESS)
  Process: 1630 ExecStart=/etc/init.d/qemu-guest-agent start (code=exited, status=0/SUCCESS)
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/qemu-guest-agent.service
           └─1638 /usr/sbin/qemu-ga --daemonize -m virtio-serial -p /dev/virtio-ports/org.qemu.guest_agent.0

c)最后,这个漂亮的管道将返回ip,而不是NAMEOFVMNIC放置eth0,enp1s0等。

virsh domifaddr  --domain yourvmname --source agent|grep -w NAMEOFVMNIC|egrep -o '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}'

-1

(虽然您似乎对这样一个简单的答案来说太高级了)

$ ifconfig

工作?


另外,请注意,如果同一台计算机上的实例重复,因为该计算机将存在伪造的MAC地址等问题,...可以通过多种方式手动对其进行编辑(并且我认为还应为此运行一条命令)
David

我的ubuntu服务器主机上只有一个虚拟机“ vm1”,“ ifconfig”命令输出未显示分配给“ eth0”网络适配器的IP地址。
仙林2012年

是的,您没有IP ...您是否尝试过“ dhclient eth0”-可能需要sudo
David David

我尝试了但仍无法从主机服务器将dhcp ip获取到来宾VM。我的主机服务器被分配了一个固定IP,它可以访问Internet。
仙林2012年

如果您想要不在父网络上的IP,则要在虚拟机设置中选择NAT,而不是桥接。
大卫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.