web-dev-qa-db-fra.com

Comment trouver l'adresse IP d'une machine virtuelle KVM, que je peux SSH dedans?

J'ai suivi ce guide ( Virtualization With KVM On Ubuntu 11.1 ) to setup my KVM (Virtual Machines Software) on my Ubuntu 11.10 Serveur. Cependant, je n'ai pas configuré l'adresse IP de ma VM lors de la création de la VM, au lieu d'utiliser:

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

J'ai utilisé: (j'ai supprimé "--ip = 192.168.0.101 --gw = 192.168.0.1" de la ligne de commande)

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

J'ai configuré le pont réseau selon les instructions du guide et la nouvelle interface de la VM est connectée au pont réseau.

Je suppose que le KVM attribuera mon VM via DHCP mais je n'ai pas d'informations sur l'adresse IP de ma nouvelle VM, où puis-je trouver l'adresse IP de la VM et SSH à la nouvelle VM? Merci.

[Notes: J'ai réussi à me connecter au VM sans connaître l'adresse IP de la VM. Utilisation de " Xming + SSH avec X Graphic Forwarding " Mais il n'y a pas de DHCP adresse IP attribuée à ma VM, Outre la question ci-dessus, j'ai une autre question ici: Comment activer le DCHP sur mon VM donc quand j'utilise Xming pour me connecter via "virt viewer" je peux à moins voir mon adresse IP est là.]

31
Xianlin

Tu peux courir arp -n pour voir quelle adresse IP votre machine virtuelle récupère. De cette façon, vous n'avez pas à vous connecter à vm invité et à taper ifconfig.

Le blog ci-dessous contient plus de détails et inclut un script Perl qui automatise la recherche de l'adresse d'une machine virtuelle.

Astuce: Trouvez l'adresse IP d'une machine virtuelle

21
chenwj

Essaye ça:

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

Vous pouvez également utiliser le formulaire suivant si vous connaissez l'adresse MAC:

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

L'adresse MAC peut être trouvée à partir de la commande dumpxml. Voir Existe-t-il un moyen de déterminer quelle interface virtuelle appartient à une machine virtuelle dans un hôte kvm?

31
Rahul

Je suppose que c'est une vieille question, mais les versions actuelles de virsh rendent cela beaucoup plus facile si vous utilisez un réseau privé nat ou ponté. J'ai une machine virtuelle nommée steak sur un réseau privé (routé) (AKA "NAT"). Ce n'est que deux commandes pour trouver quelle adresse IP a été attribuée par le mécanisme intégré:

$ 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

J'ai également un autre VM (eggs) qui est ponté sur le réseau normal (connecté à un périphérique de pont sur l'hôte hyperviseur). Libvirt ne lui attribue pas d'adresse; il obtient une adresse du serveur DHCP de mon réseau, qui met également à jour le DNS dynamique dans mon cas. C'est une possibilité probable lorsqu'il n'y a pas de sortie de domifadd pour cette machine virtuelle. Donc, vous devez essentiellement trouver l'adresse comme si elle était autre machine - le trouver dans la table arp est probablement le plus simple - ce qui signifie ip neighbour maintenant, comme arp est obsolète et n'est plus présent sur certaines distributions. Heureusement pour ceux d'entre nous qui n'épelent pas les choses avec des voyous supplémentaires, vous pouvez également utiliser des versions plus courtes, comme ip neigh et ip n (ou ip neighbor). ;) Ci-dessous, j'utilise domiflist pour trouver l'adresse MAC (notez qu'elle est connectée à br0 dans la colonne "source"), puis recherchez-le dans la table 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
6
dannysauer

liste pour vms:

virsh list

obtenir vm MAC à partir du nom

virsh domiflist debian8

faire l'analyse de votre sous-réseau vm avec grep (MAC doit être en majuscule)

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

résultat

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)
5
Antonín Vrba

Si vous avez accès à la console VM alors exécutez simplement ifconfig -a sur l'invité. Pendant que vous y êtes, vérifiez que l'invité dispose d'une connectivité réseau et que sshd est en cours d'exécution.

Si vous n'avez pas accès à la console, il est probable que l'adresse IP ait été attribuée par DHCP. Recherchez une autre machine qui obtient également une affectation DHCP, peut-être le serveur hôte, puis ajoutez 1 à l'adresse et essayez-la. En fait, essayez les 5 ou 6 adresses suivantes. Si cela ne fonctionne pas, vous avez soit un grand réseau actif et devrez essayer toutes les adresses IP du sous-réseau, soit il y a un problème de réseau de niveau inférieur comme aucune route vers l'hôte ou deux hôtes avec la même adresse MAC. Ou peut-être que vous n'avez tout simplement pas lancé sshd.

L'utilisation de la console est le moyen le plus simple de résoudre ce problème.

4
Michael Dillon

Pour voir l'adresse IP de votre VM/s, lancez simplement:

$ arp -n

Si arp n'est pas installé sur votre système, installez simplement le net-tools paquet.

3
Alxs

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 ..:..:..:..:..:..)

Analyser le sous-réseau. Analyser la sortie avec awk pour obtenir des lignes comme <IP> <MAC>. Ensuite, grep en eux en utilisant une liste des MAC des VMs.

La liste des MAC est obtenue en listant toutes les VMs (en supprimant également les lignes vides), puis en faisant virsh domiflist pour chacun d'eux, puis en cherchant un modèle qui ressemble à un MAC.

Sources:

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

2
Velkan

Il est possible de se connecter via VNC intégré avec virt-manager, et vous vous connectez tty, trouvez l'adresse IP avec ifconfig eth0. Normalement eth0, sauf indication contraire.

2
daisy

Une belle solution qui utilise l'agent qemu-guest.

a) Configurer votre VM pour utiliser l'agent qemu-guest sur l'hôte: ajouter avec virt-manager un canal "qemu-guest-agent" est vraiment facile. Dans mon cas, la machine s'appelle "Debian", et xml après la modification sera similaire à cette.

 <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) Sur l'invité, installez qemu-guest-agent et assurez-vous qu'il est démarré

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) Enfin cette jolie pipe retournera l'ip, au lieu de NAMEOFVMNIC mettre eth0, enp1s0, etc.

virsh domifaddr  --domain yourvmname --source agent|grep -w NAMEOFVMNIC|egrep -o '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}'
1
elbarna
  1. Obtenez votre liste de domaines par virsh list --all

    virsh # list --all
    
    2     webserver_01                   running
    
  2. Obtenez votre liste d'interfaces de domaine par identifiant ou nom de domaine à l'aide de virsh domiflist yourDomainId, et vous verrez l'adresse MAC de l'interface du domaine.

    virsh # domiflist 2
    
    bridge     br0        virtio      52:54:00:42:be:96
    
  3. À l'aide de nmap scannez votre LAN par nmap -sn 192.168.1.0/24|grep -i '52:54:00:42:be:96' -B 2, vous obtiendrez l'adresse 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
lupguo

J'ai mes KVM invités sur l'interface br0 donc je pense que c'est un peu différent, mais voici mes deux scripts que j'ai faits.

Remarque: pour utiliser ARP, vous devez d'abord avoir le MAC dans votre table Arp. Il est donc préférable d'utiliser fping pour effectuer un ping rapide sur l'ensemble du réseau (cela prend environ 2 secondes). Cela garantit que votre cache Arp est à jour.

apt-get install fping
yum install fping

Trouver une adresse IP d'invité unique via:

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

Trouver toutes les IP invitées via:

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
0
FreeSoftwareServers

Si vous avez QEMU (émulateur VM), allez sur le bouton "i" et vérifiez la carte réseau associée au réseau "Br0". Prenez note de l'adresse mac de la carte réseau. Maintenant, connectez-vous à votre VM -> Ouvrir le terminal -> tapez: "ifconfig" commande dans le terminal -> prenez note de l'adresse IP associée à l'adresse Mac que vous avez notée précédemment.

Vous pouvez vous connecter à votre VM en utilisant PuTTY ou n'importe quel client ssh en utilisant l'IP que vous avez notée à la dernière étape.

0
saurav

J'ai écrit un get-vm-ip script (disponible sur https://github.com/earlruby/create-vm/blob/master/get-vm-ip ) qui l'utilise pour obtenir l'IP:

HOSTNAME=[your vm name]
MAC=$(virsh domiflist $HOSTNAME | awk '{ print $5 }' | tail -2 | head -1)
arp -a | grep $MAC | awk '{ print $2 }' | sed 's/[()]//g'
0
Earl Ruby