¿Cómo SSH a un invitado VirtualBox externamente a través de un host? [cerrado]


644

Tengo una VM de Ubuntu ejecutándose en mi máquina con Windows 7. ¿Cómo lo configuro para poder acceder al servidor web externamente a través de SSH?

Encontré pasos ( Configurar el acceso SSH entre VirtualBox Host y Guest VM ) para poder enviar ssh a mi invitado desde mi host, pero eso todavía me deja con el problema de acceder a través de mi enrutador.

Supongo que podría instalar un servidor SSH en mi máquina Windows y luego hacer un túnel varias veces (aunque no estoy 100% seguro de qué usar en términos de locales, dinámicos, etc. o cómo configurar múltiples túneles), pero, ¿hay alguna manera de hacer que la máquina virtual sea accesible directamente a mi enrutador para que yo pueda transferirla directamente?


3
Hay una manera mucho más fácil de hacer esto, utilizando Vagrant (que crea máquinas virtuales listas para usar (ssh-accessable, ip-accessable) desde un archivo de configuración o GUI). No conozco su caso de uso, pero he escrito un gran tutorial sobre cómo crear una máquina virtual de servidor Ubuntu accesible mediante ssh con Vagrant , útil cuando desea configurar una máquina de desarrollo basada en LAMP.
Sliq

1
Vagrant es una gran herramienta, pero no es compatible con las versiones más recientes de virtualbox
LizH

2
La mejor respuesta está más abajo: stackoverflow.com/a/10410527/2214806
Michael


Creo que podría ser útil tener un lugar nuevo y específico donde hablar sobre el área de virtualización 51.meta.stackexchange.com/questions/28201/…
realtebo

Respuestas:


1308

La mejor manera de iniciar sesión en un VM LinuxBox virtual invitado es el reenvío de puertos . De manera predeterminada, ya debería tener una interfaz que utilice NAT . Luego vaya a la configuración de Red y haga clic en el botón Reenvío de puertos . Agregar una nueva regla . Como nombre de la regla, inserte "ssh". Como "Puerto de host", inserte 3022. Como "Puerto de invitado", inserte 22. Todo lo demás de la regla se puede dejar en blanco.

o desde la línea de comando

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

donde 'myserver' es el nombre de la VM creada. Verifique las reglas agregadas:

VBoxManage showvminfo myserver | grep 'Rule'

¡Eso es todo! Asegúrese de no olvidar instalar un servidor SSH en la VM:

sudo apt-get install openssh-server

Para SSH en la máquina virtual invitada, escriba:

ssh -p 3022 user@127.0.0.1

¿Dónde userestá su nombre de usuario dentro de la VM?


24
@Keyslinger, ¿es esto lo que estabas buscando? ssh -p 3022 user@127.0.0.1 Ese fue el único paso que me faltaba y fui a buscar en otro sitio.
D. Woods

10
También agregué el redireccionamiento de puerto de 2020 a 80, para que pueda acceder fácilmente a Apache desde el navegador usando 192.0.0.1:2020 . VBoxManage modifyvm myserver --natpf1 "ssh, tcp ,, 2020,, 80"
Eduardo Russo

44
thebigdog, puedes decapitar directamente: VBoxHeadless -s 'vmname'
vkostromin

44
¿Por qué estamos usando el puerto 3022 y no el predeterminado 22?
Seraphim

3
Para hacer la vida más fácil, abra ~ / .ssh / config, agregue lo siguiente Host mybox HostName 127.0.0.1 User myuser Port 3022a ese archivo (agregue la sangría usted mismo), luego solo necesita ssh myboxcada vez :)
vancexu

129

Cambie el tipo de adaptador en VirtualBox a puente y configure el invitado para usar DHCP o establezca una dirección IP estática fuera de los límites de DHCP. Esto hará que la máquina virtual actúe como un invitado normal en su red doméstica. Luego puede portar hacia adelante.


2
¿Alguna idea de cómo funcionará la configuración de 2 adaptadores? ¿Uno en NAT y otro solo en host?
CantGetANick

16
En mi opinión, exponer la VM en la red local no es la mejor opción (por ejemplo, en una red de oficina), la solución propuesta por @vkostromin mantiene la encapsulación de la VM dentro del host.
Victor P.

1
@VictorP. ¿podría explicar por qué no es la mejor opción en una red de oficinas? ¿Es por seguridad o?
mdo123

1
Incluso sabiendo que esa no es la mejor opción, en mi configuración actual, configurar el adaptador en puente es la única solución que funciona.
James

69

Mantener el adaptador NAT y agregar un segundo adaptador solo de host funciona de manera sorprendente y es crucial para las computadoras portátiles (donde la red externa siempre cambia).

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

Recuerde crear una red solo de host en virtualbox (GUI -> configuración -> red), de lo contrario no podrá crear la interfaz de solo host en el invitado.


2
Solo esta respuesta funcionó para mí, nada más lo hizo. Además, acabo de agregar un adaptador adicional y funcionó, no fue necesario editar el /etc/network/interfaces, ¡Gracias!
brokenfoot

3
De acuerdo, esta es la mejor respuesta. De lo contrario, usted está saltando a través de aros cada vez que desee acceder a un servicio común ( ssh, sftp, etc.), ya que tendría que ir a través de un puerto no estándar.
Kirk Woll


1
otra buena fuente para configurar esto 2buntu.com/articles/1513/…
mdo123

1
@Sparkler se está ejecutando sshd? ¿Hay un firewall cerrando puertos?
orip

24

También puede usar una red en puente (o "adaptador de puente", en versiones más recientes) en la configuración de red . Esto colocará su VM en una VLAN con su máquina. Entonces puede simplemente ingresar a la máquina virtual de esta manera.

usuario ssh @ IP_OF_VM


Con esta solución, ¿la conexión SSH atraviesa la LAN?
user2233706

23

Cómo hacer una red solo de host ( mejor que puenteada) para Solaris 10 y Ubuntu 16.04

Agregar interfaz solo de host

  1. Virtualbox> Archivo> Preferencias> Red> Redes de solo host> Agregar
  2. Apagar vm.
  3. Configuración de VM> Red. El primer adaptador debe ser Nat, el segundo solo host.
  4. Inicie cmd.exe y ejecútelo ipconfig /all. Deberías ver líneas:

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

    El segundo adaptador en invitado también debe estar en 192.168.59. *.

  5. Inicie VM.

Solaris 10

  1. Verifique la configuración ifconfig -a . Debería ver e1000g0 y e1000g1. Estamos interesados ​​en e1000g1.
  2. ifconfig e1000g down
  3. ifconfig e1000g 192.168.56.10 netmask 255.255.255.0 up
  4. Verifique desde el host si esta interfaz es accesible: ping 192.168.56.10

Conservar esa configuración al reiniciar

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

Configure el servicio ssh ( administración ) para iniciar sesión como root (no recomendado)

Compruebe si ssh está habilitado

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

Modifique / etc / ssh / sshd_config para que haya

PermitRootLogin yes

Reiniciar el servicio ssh

svcadm restart ssh

Desde el host, compruébalo

ssh root@192.168.56.10

Ubuntu 16.04

Lista de interfaces:

ip addr

Debería ver tres interfaces como lo, enp0s3, enp0s8. Usaremos el tercero.

Editar / etc / network / interfaces

auto enp0s8
iface enp0s8 inet static
    address 192.168.56.10
    netmask 255.255.255.0

Entonces sudo ifup enp0s8. Compruebe si enp0s8 tiene la dirección correcta. Deberías ver tu ip:

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

Si no, puedes correr sudo ifdown enp0s8 && sudo ifup enp0s8

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


3
Esto no funciona si su red de solo host está activada 192.168.59.1y usted especifica 192.168.56.10la IP estática del invitado. La dirección de subred completa de la clase C debe coincidir exactamente, por lo que deberá usar algo como 192.168.59.10dentro del invitado.
Preguntas de Quolonel

16

Para ssh a una máquina virtual Ubuntu que se ejecuta en VirtualBox desde su máquina host, debe configurar dos adaptadores de red para la máquina virtual.

En primer lugar, detenga la VM si aún no.

Luego seleccione la VM y haga clic en el menú Configuración en la barra de herramientas de VirtualBox:

ingrese la descripción de la imagen aquí

Configurar adaptador 1

ingrese la descripción de la imagen aquí

Configurar adaptador 2

ingrese la descripción de la imagen aquí

(Nota: no necesita configurar ningún reenvío de puertos).

Eso es. Una vez configurado, puede iniciar su VM. En su VM, la configuración de red se verá a continuación y también tendrá acceso a Internet:

ingrese la descripción de la imagen aquí

También en su máquina host, puede enviar ssh a su VM:

ingrese la descripción de la imagen aquí

Asegúrese de que el servidor SSH se haya instalado y se esté ejecutando en la VM.

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

Si no, instálelo:

$ sudo apt-get install openssh-server

También para su información:

  • Mi versión de VirtualBox: 5.2.6 r120293 (Qt5.6.2), 2018
  • Mi versión de Ubuntu: Ubuntu 16.04.3 LTS
  • Mi máquina host: Windows 10

Si no tiene ningún adaptador solo de host, puede crear uno desde:File > Host Network Manager > Create
Cirelli94

Lamentablemente no llega a la red de Internet
Cirelli94

5
SSH Volver a su casa / Office VirtualBox Guest Machine desde INTERNET

Las respuestas proporcionadas por otros usuarios aquí: How to SSH to a VirtualBox guest externally through a host?

... me ayudó a cumplir la tarea de conectarme desde fuera de Internet a la máquina invitada de la computadora de mi casa. Debería poder conectarse usando computadoras, tabletas y teléfonos inteligentes (Android, iPhone, etc.). Agrego algunos pasos más en caso de que pueda ser útil para otra persona:

Aquí hay un diagrama rápido de mi configuración:

  • 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 clave para mí fue darme cuenta de que TODAS las conexiones eran PASSING-THROUGHdispositivos intermedios para llegar desde mi PC remota a mi máquina virtual invitada en casa: ¡por lo tanto, reenvío de puertos!

Notas: * Necesita un cliente ssh para solicitar una conexión segura y un servidor ssh en ejecución para procesar la conexión segura.

  • Reenviaré el puerto 3022 como se usa en la respuesta elegida desde arriba.

  • Ingrese sus IP cuando sea necesario (módem / enrutador doméstico, IP de host, IP de invitado, etc.), los nombres elegidos son solo ejemplos de uso o cambio.

1.Cree el túnel ssh al puerto 3022 en la dirección IP externa de su módem / enrutador.

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

2.Port forward = estamos pasando a través de la conexión del enrutador a la máquina host

  • También asegúrese de que las reglas de firewall / IPtable en el enrutador permitan que los puertos se reenvíen (se abren si es necesario)

  • Entradas requeridas de la Pfwd SCREEN del enrutador: AppName: SSH_Fwd, Port_from: 3022, Protocol: both (UDP / TCP), IP_address: hostIP_address, Port_to: 3022, todo lo demás puede estar en blanco

Recursos / información del software del enrutador DD-WRT:

3. Firewall de la máquina host: abra el puerto 3022 # para que el puerto reenviado pueda pasar a través de la máquina invitada

  • Máquina host: instale VirtualBox, adiciones de invitados y máquina invitada si aún no lo ha hecho

  • Configure la máquina invitada y luego siga la sección Red a continuación

  • Utilicé VirtualBox GUI para configurar la red del invitado, más fácil que la CLI

  • Si desea utilizar otros métodos, consulte: VirtualBox/manual/ch06.html#natforward

4.Algunos sugieren usar el adaptador de puente de red para invitado = acceso a LAN y otras máquinas en su LAN. Esto también plantea un mayor riesgo de seguridad, porque ahora su máquina invitada ahora está expuesta a máquinas LAN y posiblemente a los piratas informáticos de INTERNET si el firewall no está configurado correctamente. Así que seleccioné el adaptador de red conectado a NAT para una menor exposición a los riesgos de seguridad puenteados.

En la máquina invitada, haga lo siguiente:

  • Configuración de red de la máquina invitada VirtualBox: Adaptador 1: conectado a NAT
  • Regla de reenvío de puertos de VirtualBox de la máquina invitada: Nombre: External_SSH, Protocolo: TCP, Puerto de host: 3022, Puerto de invitado 22, IP de host e invitado: dejar en blanco
  • haga clic en avanzar en la sección Red y luego haga clic en Reenvío de puertos para ingresar reglas
  • Guest Machine Firewall: abra el puerto 22 # para que la conexión ssh pueda ingresar
  • Máquina invitada: asegúrese de que el servidor ssh esté instalado, configurado correctamente y en ejecución
  • Prueba de LINUX para ver si el servidor ssh se ejecuta con comando: sudo service ssh status
  • Puede verificar netstat para ver si la conexión se realizó al puerto 22 en la máquina invitada

También hay diferentes servidores y clientes ssh dependiendo de la plataforma que use.

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

Para usuarios de Ubuntu:

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

Eso debería ser. Si cometí un error o deseo agregar algo, siéntase libre de hacerlo, sigo siendo un novato.

Espero que esto ayude a alguien. ¡Buena suerte!


5

Para el host de Windows, puede:

  1. En virtualbox manager:
    1. seleccione ctrl+ Gen su administrador de virtualbox,
    2. luego vaya al panel de red
    3. agregar una red privada
      1. asegúrese de que activar DHCP NO esté seleccionado
  2. En gestión de red (windows)
    1. Seleccione el adaptador de host virtualbox creado recientemente y la tarjeta de red física
    2. Haga clic derecho y seleccione "Hacer puente"
  3. Disfrutar

4

También puede iniciar un puerto hacia su HOST, O CUALQUIER OTRO SERVIDOR, desde su Invitado. Esto es especialmente útil si su Invitado está 'bloqueado' o no puede completar la opción ModifyVM (por ejemplo, sin permiso para VBoxManage).

Tres requisitos menores son: 1) puede / puede iniciar sesión en VirtualBox Guest (a través de la 'consola' GUI, otro Guest, etc.), 2) tiene una cuenta en VirtualBox HOST (u otro servidor), y 3) SSH y TCP el reenvío no está bloqueado.

Suponiendo que puede cumplir los 3 requisitos, estos son los pasos:

  1. En el Guest, ejecute netstat -rny busque la dirección de Gateway al destino de ruta predeterminado 0.0.0.0. Digamos que es "10.0.2.2". Esta dirección de 'Puerta de enlace' es (una de) las IP virtuales de VirtualBox Host.
  2. En el Guest, ejecute ssh -R 2222:localhost:22 10.0.2.2donde "10.0.2.2" es la dirección IP del servidor VirtualBox -O- cualquier otra IP del servidor al que desee reenviar el puerto.
  3. En el Host, ejecute ssh 10.0.2.2 -p2222donde 10.0.2.2 es la puerta de enlace predeterminada / VBHost IP virtual que se encuentra en el paso 1. Si NO es el host VirtualBox al que reenvía el puerto, entonces el comando esssh localhost -p2222

4

Siga los pasos a continuación para iniciar sesión en su máquina virtual ubuntu que se ejecuta en una caja virtual desde la máquina host utilizando masilla (sin reenvío de puertos):

  1. En el administrador de Virtualbox, seleccione el vm, haga clic en el icono de configuración. Luego, vaya a Redes y habilite dos adaptadores como se muestra a continuación:

    • Adaptador 1 (para acceso a Internet): conectado a -> NAT, avanzado -> Verifique el cable conectado.
    • Adaptador 2: conectado a -> Adaptador solo host, Avanzado -> Verifique el cable conectado y el modo Promiscuo -> Permitir todo.
  2. Inicie el ubuntu vm.

  3. Inicie sesión en la máquina virtual como root.
  4. Edite el archivo '/ etc / network / interfaces' como se muestra a continuación y guárdelo:

    auto lo
    iface lo inet loopback
    
    auto eth0
    iface eth0 inet dhcp
    
    auto eth1
    iface eth1 inet dhcp
    
  5. Reinicie la VM.

  6. Inicie sesión en la VM y ejecute el siguiente comando para verificar la IP asignada a eth1:

    ifconfig
    
  7. Use esta IP para abrir sesión de masilla para la VM.



2

Ubuntu 18.04 LTS

Configuración con puente para ver la ip del servidor y conectarse sin "reenvío de puerto"

VirtualBox> haga clic con el botón derecho en servidor> configuración> Red> habilitar adaptador 2> seleccione "puenteado>> Modo promiscuo: permitir todo> Verificar el cable conectado> iniciar servidor

En el servidor ubuntu, edite el sudo nano /etc/netplan/*init.yamlarchivo,

Mi archivo de muestra:

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

Comandos que te ayudarán

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

Configure las direcciones IP estáticas en el servidor Ubuntu 18.04 LTS - con NetPlan


1

Simplemente configurar la configuración de red en puente hizo el truco para mí.

Su IP cambiará cuando haga esto. Sin embargo, en mi caso no cambió de inmediato. ifconfigdevolvió la misma ip. Reinicié el vm y el boom, la ip se configuró en un inicio con 192. * e inmediatamente se me permitió el acceso ssh.


Supongo que esta información es parcial o incluso completamente inexacta en algún sentido general, no tengo idea. downvoter no se molestó en decirlo.
boulder_ruby

A saber, "para algunos, no funciona".
boulder_ruby

0

En redes seguras, configurar su red para puentear podría no funcionar. Los administradores solo pueden permitir una dirección MAC por puerto o, lo que es peor, bloquear el puerto si los conmutadores detectan múltiples Mac en un puerto.

La mejor solución en mi opinión es configurar interfaces de red adicionales para manejar servicios adicionales que le gustaría ejecutar en sus máquinas. Por lo tanto, tengo una interfaz de puente para permitir el puente cuando llevo mi computadora portátil a casa y puedo conectarla a SSH desde otros dispositivos en mi red, así como también un adaptador de host cuando me gustaría conectar SSH a mi VM desde mi computadora portátil cuando estoy conectado a la red wifi eduroam en el campus.


0

Use el adaptador de red NAT y agregue el puerto hacia adelante. Mencione el host actual ip. No use 127.0.0.1 o localhost.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.