Comment SSH à un invité VirtualBox en externe via un hôte? [fermé]


644

J'ai une machine virtuelle Ubuntu en cours d'exécution sur ma machine Windows 7. Comment le configurer pour pouvoir accéder au serveur Web en externe via SSH?

J'ai trouvé des étapes ( configurer l'accès SSH entre l'hôte VirtualBox et les machines virtuelles invitées ) pour pouvoir ssh vers mon invité à partir de mon hôte, mais cela me pose toujours le problème d'y accéder via mon routeur.

Je suppose que je pourrais installer un serveur SSH sur ma machine Windows, puis tunneler plusieurs fois (bien que je ne sois pas sûr à 100% de ce qu'il faut utiliser en termes de local, dynamique, etc. ou comment configurer plusieurs tunnels?), mais existe-t-il un moyen de rendre la machine virtuelle directement accessible à mon routeur afin que je puisse directement le transférer vers lui?


3
Il existe un moyen beaucoup plus simple de le faire, en utilisant Vagrant (qui crée des machines virtuelles prêtes à l'emploi (accessibles par ssh, accessibles par ip) à partir d'un fichier de configuration ou d'une interface graphique). Je ne connais pas votre cas d'utilisation, mais j'ai écrit un grand tutoriel sur Comment créer une machine virtuelle de serveur Ubuntu accessible en ssh avec Vagrant , utile lorsque vous souhaitez configurer une machine de développement basée sur LAMP.
Sliq

1
Vagrant est un excellent outil, mais il n'est pas compatible avec les versions les plus récentes de virtualbox
LizH

2
La meilleure réponse est plus bas: stackoverflow.com/a/10410527/2214806
Michael


Je pense que cela pourrait être utile d'avoir un nouvel endroit spécifique pour parler de virtualisation area51.meta.stackexchange.com/questions/28201/…
realtebo

Réponses:


1308

La meilleure façon de se connecter à une machine virtuelle Linux VirtualBox invitée est la redirection de port . Par défaut, vous devriez déjà avoir une interface qui utilise NAT . Accédez ensuite aux paramètres réseau et cliquez sur le bouton de redirection de port . Ajoutez une nouvelle règle . Comme nom de règle, insérez "ssh". En tant que "Port hôte", insérez 3022. En tant que "Port invité", insérez 22. Tout le reste de la règle peut être laissé vide.

ou depuis la ligne de commande

VBoxManage modifyvm myserver --natpf1 "ssh,tcp,,3022,,22"

où «myserver» est le nom de la machine virtuelle créée. Vérifiez les règles ajoutées:

VBoxManage showvminfo myserver | grep 'Rule'

C'est tout! Assurez-vous de ne pas oublier d'installer un serveur SSH dans la VM:

sudo apt-get install openssh-server

Pour SSH dans la machine virtuelle invitée, écrivez:

ssh -p 3022 user@127.0.0.1

userest votre nom d'utilisateur dans la machine virtuelle.


24
@Keyslinger, c'est ce que vous cherchiez? ssh -p 3022 user@127.0.0.1 C'était la seule étape qui me manquait et je suis juste allé trouver sur un autre site.
D. Woods,

10
J'ai également ajouté la redirection de port de 2020 à 80, donc je peux facilement accéder à Apache depuis le navigateur en utilisant 192.0.0.1:2020 . VBoxManage modifyvm myserver --natpf1 "ssh, tcp ,, 2020,, 80"
Eduardo Russo

4
thebigdog, vous pouvez directement sans tête: VBoxHeadless -s 'vmname'
vkostromin

4
Pourquoi utilisons-nous le port 3022 et non le port 22 par défaut?
Seraphim

3
Pour vous faciliter la vie, ouvrez ~ / .ssh / config, ajoutez ce qui suit Host mybox HostName 127.0.0.1 User myuser Port 3022à ce fichier (ajoutez le retrait vous-même), puis il vous suffit de le faire à ssh myboxchaque fois :)
vancexu

129

Modifiez le type d'adaptateur dans VirtualBox en ponté et définissez l'invité à utiliser DHCP ou définissez une adresse IP statique en dehors des limites de DHCP. Cela entraînera la machine virtuelle à agir comme un invité normal sur votre réseau domestique. Vous pouvez ensuite rediriger le port.


2
Une idée de la façon dont la configuration de l'adaptateur 2 fonctionnera? Un sur NAT et l'autre sur Host Only?
CantGetANick

16
À mon avis, exposer la VM sur le réseau local n'est pas la meilleure option (par exemple dans un réseau de bureau), la solution proposée par @vkostromin conserve l'encapsulation de la VM au sein de l'hôte.
Victor P.

1
@VictorP. pouvez-vous expliquer pourquoi ce n'est pas la meilleure option dans un réseau de bureaux? Est-ce pour des raisons de sécurité ou?
mdo123

1
Même en sachant que ce n'est pas la meilleure option, dans ma configuration actuelle, définir l'adaptateur sur pont est la seule solution qui fonctionne.
James

69

Garder l'adaptateur NAT et ajouter un deuxième adaptateur hôte uniquement fonctionne à merveille et est crucial pour les ordinateurs portables (où le réseau externe change toujours).

http://muffinresearch.co.uk/archives/2010/02/08/howto-ssh-into-virtualbox-3-linux-guests/

N'oubliez pas de créer un réseau uniquement hôte dans virtualbox lui-même (GUI -> paramètres -> réseau), sinon vous ne pouvez pas créer l'interface hôte uniquement sur l'invité.


2
Seule cette réponse a fonctionné pour moi, rien d'autre n'a fait. De plus, je viens d'ajouter un adaptateur supplémentaire et cela a fonctionné, je n'ai pas eu besoin de modifier le /etc/network/interfaces, merci!
pied cassé le

3
D'accord, c'est la meilleure réponse. Sinon, vous sautez à travers des cerceaux chaque fois que vous voulez accéder à un service commun ( ssh, sftp, etc.) puisque vous auriez à passer par un port non standard.
Kirk Woll


1
une autre bonne source sur la configuration de cela 2buntu.com/articles/1513/…
mdo123

1
@Sparkler exécute sshd? Y a-t-il un pare-feu qui ferme les ports?
orip

24

Vous pouvez également utiliser un réseau ponté (ou «Bridge Adapter», dans les versions plus récentes) dans les paramètres réseau . Cela mettra votre VM dans un VLAN avec votre machine. Ainsi, vous pouvez simplement accéder à la machine virtuelle comme ceci.

utilisateur ssh @ IP_OF_VM


Avec cette solution, la connexion SSH passe-t-elle sur le LAN?
user2233706

23

Comment faire un réseau hôte uniquement ( mieux que ponté) pour Solaris 10 et Ubuntu 16.04

Ajouter une interface hôte uniquement

  1. Virtualbox> Fichier> Préférences> Réseau> Réseaux hébergés uniquement> Ajouter
  2. Arrêter vm.
  3. Paramètres de la VM> Réseau. Le premier adaptateur doit être Nat, le deuxième hôte uniquement.
  4. Démarrez cmd.exe et exécutez ipconfig /all. Vous devriez voir des lignes:

    Ethernet adapter VirtualBox Host-Only Network:
       ...
       IPv4 Address. . . . . . . . . . . : 192.168.59.1
    

    Le deuxième adaptateur en invité devrait également être en 192.168.59. *.

  5. Démarrez VM.

Solaris 10

  1. Vérifiez les paramètres ifconfig -a . Vous devriez voir e1000g0 et e1000g1. Nous sommes intéressés par e1000g1.
  2. ifconfig e1000g down
  3. ifconfig e1000g 192.168.56.10 netmask 255.255.255.0 up
  4. Vérifiez à partir de l'hôte si cette interface est accessible: ping 192.168.56.10

Conserver ces paramètres au redémarrage

# vi /etc/hostname.e1000g1
192.168.56.10 netmask 255.255.255.0
# reboot

Configurer le service ssh ( administration ) pour se connecter en tant que root (non conseillé)

Vérifiez si ssh est activé

# svcs -a | grep ssh
online         15:29:57 svc:/network/ssh:default

Modifiez / etc / ssh / sshd_config pour qu'il y ait

PermitRootLogin yes

Redémarrez le service ssh

svcadm restart ssh

De l'hôte, vérifiez-le

ssh root@192.168.56.10

Ubuntu 16.04

Liste des interfaces:

ip addr

Vous devriez voir trois interfaces comme lo, enp0s3, enp0s8. Nous utiliserons le troisième.

Modifier / etc / network / interfaces

auto enp0s8
iface enp0s8 inet static
    address 192.168.56.10
    netmask 255.255.255.0

Alors sudo ifup enp0s8. Vérifiez si enp0s8 a obtenu la bonne adresse. Vous devriez voir votre ip:

 $ ip addr show enp0s8
 ...
    inet 192.168.56.10/24 brd 192.168.56.255 scope global secondary enp0s8

Sinon, vous pouvez exécuter sudo ifdown enp0s8 && sudo ifup enp0s8

/superuser/424083/virtualbox-host-ssh-to-guest/424115#424115


3
Cela ne fonctionne pas si votre réseau uniquement hôte est activé 192.168.59.1et que vous spécifiez 192.168.56.10l'IP invité statique. L'adresse de sous-réseau de classe C entière doit correspondre exactement, vous devez donc utiliser quelque chose comme l' 192.168.59.10intérieur de l'invité à la place.
Questions Quolonel

16

Pour passer à une machine virtuelle Ubuntu exécutée dans VirtualBox à partir de votre machine hôte, vous devez configurer deux adaptateurs réseau pour la machine virtuelle.

Tout d'abord, arrêtez la machine virtuelle si ce n'est pas encore fait.

Sélectionnez ensuite la machine virtuelle et cliquez sur le menu Paramètres dans la barre d'outils VirtualBox:

entrez la description de l'image ici

Configurer l'adaptateur 1

entrez la description de l'image ici

Configurer l'adaptateur 2

entrez la description de l'image ici

(Remarque: vous n'avez pas besoin de configurer de redirection de port.)

C'est ça. Une fois configuré, vous pouvez démarrer votre VM. Dans votre machine virtuelle, la configuration du réseau ressemblera à ci-dessous et vous aurez également accès à Internet:

entrez la description de l'image ici

Toujours sur votre machine hôte, vous pouvez accéder à votre machine virtuelle par ssh:

entrez la description de l'image ici

Assurez-vous que le serveur SSH a été installé et fonctionne sur la machine virtuelle.

$ ps aux | grep sshd
root 864 0.1 0.5 65512 5392 ? Ss 22:10 0:00 /usr/sbin/sshd -D

Sinon, installez-le:

$ sudo apt-get install openssh-server

Aussi pour votre information:

  • Ma version de VirtualBox: 5.2.6 r120293 (Qt5.6.2), 2018
  • Ma version Ubuntu: Ubuntu 16.04.3 LTS
  • Ma machine hôte: Windows 10

Si vous n'avez pas d'adaptateur pour hôte uniquement, vous pouvez en créer un à partir de:File > Host Network Manager > Create
Cirelli94

Il n'atteint malheureusement pas le réseau Internet
Cirelli94

5
SSH Retour à votre ordinateur invité VirtualBox à la maison / au bureau depuis INTERNET

Les réponses fournies par d'autres utilisateurs ici: How to SSH to a VirtualBox guest externally through a host?

... m'a aidé à accomplir la tâche de connexion depuis Internet sur la machine invitée de mon ordinateur personnel. Vous devriez pouvoir vous connecter à l'aide d'ordinateurs, de tablettes et de téléphones intelligents (Android, IPhone, etc.). J'ajoute quelques étapes supplémentaires au cas où cela pourrait être utile à quelqu'un d'autre:

Voici un schéma rapide de ma configuration:

  • Remote device ---> INTERNET --> MODEM --> ROUTER --> HOST MACHINE --> GUEST VM

  • Remote device (ssh client) ---> PASS THRU DEVICES ---> GUEST VM (ssh server)

  • Remote device (leave ssh port 3022) ---> INTERNET --> MODEM --> ROUTER (FWD frm:p3022 to:p3022)--> HOST MACHINE (FWD frm:p3022 to:p22) --> GUEST VM (arrive ssh port 22)

La clé pour moi était de réaliser que TOUTES les connexions étaient PASSING-THROUGHdes appareils intermédiaires pour passer de mon PC distant à ma machine virtuelle invitée à la maison - d'où la redirection de port!

Remarques: * Besoin du client ssh pour demander une connexion sécurisée et d'un serveur ssh en cours d'exécution pour traiter la connexion sécurisée.

  • Je vais transmettre le port 3022 tel qu'utilisé dans la réponse choisie ci-dessus.

  • Saisissez vos adresses IP si nécessaire (modem / routeur domestique, IP hôte, IP invité, etc.), les noms choisis ne sont que des exemples d'utilisation ou de modification.

1.Créez le tunnel ssh au port 3022 sur l'adresse IP externe de votre modem / routeur.

ssh client/device possible commands: ssh -p 3022 user-name@home_external_IP

2.Port forward = nous passons par la connexion du routeur à la machine hôte

  • Assurez-vous également que les règles du pare-feu / IPtable sur le routeur autorisent la redirection des ports (ouvrez-les si nécessaire)

  • ÉCRANS Pfwd du routeur requis: AppName: SSH_Fwd, Port_from: 3022, Protocol: both (UDP / TCP), IP_address: hostIP_address, Port_to: 3022, tout le reste peut être vide

Ressources logicielles du routeur DD-WRT / Info:

Pare-feu de la machine hôte: le port ouvert 3022 #si le port transféré peut passer à travers la machine invitée

  • Machine hôte: installez VirtualBox, les ajouts d'invité et la machine invitée si ce n'est déjà fait

  • Configurez la machine invitée, puis suivez la section Réseau ci-dessous

  • J'ai utilisé l'interface graphique de VirtualBox pour configurer le réseau de l'invité - plus facilement que CLI

  • Si vous souhaitez utiliser d'autres méthodes, reportez-vous à: VirtualBox/manual/ch06.html#natforward

4. Certains suggèrent d'utiliser l'adaptateur de pont réseau pour l'accès invité = au réseau local et à d'autres machines sur votre réseau local. Cela pose également un risque de sécurité accru, car votre ordinateur invité est désormais exposé aux ordinateurs LAN et éventuellement aux pirates INTERNET si le pare-feu n'est pas correctement configuré. J'ai donc sélectionné l'adaptateur réseau attaché au NAT pour moins d'exposition aux risques de sécurité pontés.

Sur la machine invitée, procédez comme suit:

  • Paramètres du réseau VirtualBox de la machine invitée: Adaptateur 1: attaché au NAT
  • Règle de transfert de port VirtualBox de la machine invitée: Nom: External_SSH, Protocole: TCP, Port hôte: 3022, Port invité 22, IP hôte et invité: laissez vide
  • cliquez sur avance dans la section Réseau puis cliquez sur Transfert de port pour entrer les règles
  • Pare-feu de la machine invité: ouvrez le port 22 # si la connexion ssh peut entrer
  • Machine invitée: assurez-vous que le serveur ssh est installé, configuré correctement et en cours d'exécution
  • Test LINUX pour voir si le serveur ssh fonctionne avec la commande: sudo service ssh status
  • Peut vérifier netstat pour voir si la connexion est établie au port 22 sur la machine invitée

Il existe également différents serveurs et clients ssh en fonction de la plate-forme utilisée.

  • wikipedia/Secure_Shell
  • wikipedia/Comparison_of_SSH_servers
  • wikipedia/Comparison_of_SSH_clients

Pour les utilisateurs d'Ubuntu:

  • ubuntu community: SSHOpenSSH/Configuring
  • ubuntu/community: OpenSSH/Keys

Ça devrait être ça. Si j'ai fait une erreur ou si je veux ajouter quelque chose - n'hésitez pas à le faire - je suis toujours un noob.

J'espère que cela aide quelqu'un. Bonne chance!


5

Pour l'hôte Windows, vous pouvez:

  1. Dans le gestionnaire de virtualbox:
    1. sélectionnez ctrl+G dans votre gestionnaire de virtualbox,
    2. puis allez dans le panneau réseau
    3. ajouter un réseau privé
      1. assurez-vous qu'activer DHCP n'est PAS sélectionné
  2. Dans la gestion de réseau (Windows)
    1. Sélectionnez l'adaptateur d'hôte Virtualbox nouvellement créé et la carte réseau physique
    2. Faites un clic droit et sélectionnez "Créer un pont"
  3. Prendre plaisir

4

Vous pouvez également initier un transfert vers votre hôte ou tout autre serveur depuis votre invité. Ceci est particulièrement utile si votre invité est «verrouillé» ou ne peut pas autrement compléter l'option ModifyVM (par exemple, aucune autorisation de VBoxManage).

Trois exigences mineures sont 1) vous êtes / pouvez vous connecter à l'invité VirtualBox (via l'interface graphique de la console, un autre invité, etc.), 2) vous avez un compte sur l'hôte VirtualBox (ou un autre serveur) et 3) SSH et TCP le transfert n'est pas bloqué.

En supposant que vous pouvez répondre aux 3 exigences, voici les étapes:

  1. Sur l'invité, exécutez netstat -rnet recherchez l'adresse de passerelle vers la destination de l'itinéraire par défaut 0.0.0.0. Disons que c'est "10.0.2.2". Cette adresse de «passerelle» est l'une des adresses IP virtuelles de l'hôte VirtualBox.
  2. Sur l'invité, exécutez ssh -R 2222:localhost:22 10.0.2.2 où "10.0.2.2" est l'adresse IP du serveur VirtualBox -OU- tout autre serveur IP que vous souhaitez transférer vers.
  3. Sur l'hôte, exécutez ssh 10.0.2.2 -p2222où 10.0.2.2 est la passerelle par défaut / IP virtuelle VBHost trouvée à l'étape 1. Si ce n'est PAS l'hôte VirtualBox vers lequel vous transférez le port, la commande estssh localhost -p2222

4

Suivez les étapes ci-dessous pour vous connecter à votre machine virtuelle ubuntu exécutée dans une boîte virtuelle à partir de la machine hôte à l'aide de putty (sans redirection de port):

  1. Sur Virtualbox manager sélectionnez le vm, cliquez sur l'icône des paramètres. Allez ensuite sur Réseaux et activez deux adaptateurs comme ci-dessous:

    • Adaptateur 1 (pour accès Internet): attaché à -> NAT, avancé -> Vérifiez le câble connecté.
    • Adaptateur 2: Attaché à -> Adaptateur hôte uniquement, Avancé -> Vérifiez le câble connecté et le mode Promiscuous -> Autoriser tout.
  2. Démarrez ubuntu vm.

  3. Connectez-vous à la machine virtuelle en tant que root.
  4. Modifiez le fichier '/ etc / network / interfaces' comme ci-dessous et enregistrez-le:

    auto lo
    iface lo inet loopback
    
    auto eth0
    iface eth0 inet dhcp
    
    auto eth1
    iface eth1 inet dhcp
    
  5. Redémarrez la machine virtuelle.

  6. Connectez-vous à la machine virtuelle et exécutez la commande ci-dessous pour vérifier l'IP allouée à eth1:

    ifconfig
    
  7. Utilisez cette IP pour ouvrir une session de mastic pour la machine virtuelle.



2

Ubuntu 18.04 LTS

Configuration avec ponté pour voir l'IP du serveur et se connecter sans "redirection de port"

VirtualBox> clic droit sur le serveur> paramètres> Réseau> activer l'adaptateur 2> sélectionner "ponté"> Mode promiscuous: autoriser tout> Vérifier le câble connecté> démarrer le serveur

Sur le serveur ubuntu, éditez le sudo nano /etc/netplan/*init.yamlfichier,

Mon exemple de fichier:

network:
    ethernets:
        enp0s3:
            addresses: []
            dhcp4: true
        enp0s8:
            addresses: [192.168.0.200/24]
            dhcp4: no
            dhcp6: no
            nameservers:
               addresses: [8.8.8.8, 8.8.4.4]
    version: 2

Commandes qui vous aideront

nano /etc/netplan/file.yaml     # file to specify the rules of network
reboot now                      # restart ubuntu server right now
netplan apply                   # do after edited *.yaml, to apply changes
ifconfig -a                     # show interfaces with ip, netmask, broadcast, etc...
ping google.com                 # to see if there is internet

Configurer des adresses IP statiques sur le serveur Ubuntu 18.04 LTS - avec NetPlan


1

Le simple fait de régler le paramètre réseau sur un pont a fait l'affaire pour moi.

Votre adresse IP changera lorsque vous effectuez cette opération. Cependant, dans mon cas, cela n'a pas changé immédiatement. ifconfigretourné le même ip. J'ai redémarré le vm et le boom, l'ip s'est mis à un départ avec 192. * et j'ai immédiatement été autorisé à accéder à ssh.


Je suppose que ces informations sont partiellement ou même totalement inexactes dans un sens général, je n'en ai aucune idée. downvoter n'a pas pris la peine de dire.
boulder_ruby

À savoir, "pour certains, cela ne fonctionne pas."
boulder_ruby

0

Sur les réseaux sécurisés, la configuration de votre réseau pour ponter peut ne pas fonctionner. Les administrateurs ne pouvaient autoriser qu'une seule adresse mac par port ou pire encore bloquer le port si les commutateurs détectaient plusieurs macs sur un port.

La meilleure solution à mon avis est de configurer des interfaces réseau supplémentaires pour gérer les services supplémentaires que vous souhaitez exécuter sur vos machines. J'ai donc une interface de pont pour permettre le pontage lorsque je ramène mon ordinateur portable à la maison et peut y connecter SSH à partir d'autres appareils sur mon réseau ainsi qu'un adaptateur hôte uniquement lorsque je souhaite me connecter à ma VM depuis mon ordinateur portable lorsque je suis connecté au réseau wifi eduroam sur le campus.


0

Utilisez l'adaptateur réseau NAT et ajoutez le port de transfert. Mentionnez l'hôte réel ip. N'utilisez pas 127.0.0.1 ou localhost.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.