Come SSH a un guest VirtualBox esternamente tramite un host? [chiuso]


644

Ho una macchina virtuale Ubuntu in esecuzione sul mio computer Windows 7. Come lo configuro in modo da poter accedere al server web esternamente tramite SSH?

Ho trovato i passaggi ( Setup accesso SSH tra VirtualBox Host e VM guest ) per poter inviare ssh al mio ospite dal mio host, ma ciò mi lascia ancora il problema di accedervi tramite il mio router.

Suppongo che potrei installare un server SSH sul mio computer Windows e quindi eseguire il tunneling alcune volte (anche se non sono sicuro al 100% su cosa utilizzare in termini di locale, dinamico, ecc. O come impostare più tunnel?), ma c'è un modo per rendere la VM direttamente accessibile al mio router in modo che io possa portarla direttamente?


3
C'è un modo molto più semplice per farlo, usando Vagrant (che crea VM pronte all'uso (ssh-accessable, ip-accessable) da un file di configurazione o GUI). Non conosco il tuo caso d'uso, ma ho scritto un grande tutorial su Come creare una VM server Ubuntu accessibile con ssh con Vagrant , utile quando vuoi installare una macchina di sviluppo basata su LAMP.
Sliq,

1
Vagrant è un ottimo strumento, ma non è compatibile con le versioni più recenti di
virtualbox

2
La migliore risposta è più in basso: stackoverflow.com/a/10410527/2214806
Michael,


Penso che potrebbe essere utile avere un posto nuovo, specifico, dove parlare della virtualizzazione area51.meta.stackexchange.com/questions/28201/…
realtebo

Risposte:


1308

Il modo migliore per accedere a una VM VirtualBox Linux guest è il port forwarding . Per impostazione predefinita, dovresti avere già un'interfaccia che utilizza NAT . Quindi vai alle impostazioni di rete e fai clic sul pulsante Port Forwarding . Aggiungi una nuova regola . Come nome della regola, inserire "ssh". Come "Porta host", inserisci 3022. Come "Porta ospite", inserisci 22. Tutto il resto della regola può essere lasciato in bianco.

o dalla riga di comando

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

dove "myserver" è il nome della VM creata. Controlla le regole aggiunte:

VBoxManage showvminfo myserver | grep 'Rule'

È tutto! Assicurati di non dimenticare di installare un server SSH nella VM:

sudo apt-get install openssh-server

Per SSH nella VM guest, scrivere:

ssh -p 3022 user@127.0.0.1

Dov'è il usertuo nome utente all'interno della VM.


24
@Keyslinger, è questo quello che stavi cercando? ssh -p 3022 user@127.0.0.1 Questo è stato l'unico passo che mi mancava e sono andato a trovare su un altro sito.
D. Woods,

10
Ho anche aggiunto il reindirizzamento delle porte dal 2020 all'80, in modo da poter accedere facilmente ad Apache dal browser usando 192.0.0.1:2020 . VBoxManage editvm myserver --natpf1 "ssh, tcp ,, 2020,, 80"
Eduardo Russo,

4
thebigdog, puoi direttamente senza testa: VBoxHeadless -s 'vmname'
vkostromin

4
Perché stiamo usando la porta 3022 e non quella predefinita 22?
Serafino,

3
Per semplificare la vita, apri ~ / .ssh / config, aggiungi quanto segue Host mybox HostName 127.0.0.1 User myuser Port 3022a quel file (aggiungi il rientro), quindi devi solo ssh myboxogni volta :)
vancexu

129

Modificare il tipo di adattatore in VirtualBox su bridge e impostare il guest per utilizzare DHCP o impostare un indirizzo IP statico al di fuori dei limiti del DHCP. Ciò farà sì che la macchina virtuale si comporti come un normale ospite sulla rete domestica. È quindi possibile eseguire il port forwarding.


2
Qualche idea su come funzionerà la configurazione di 2 adattatori? Uno su NAT e altro solo su Host?
CantGetANick,

16
Secondo me esporre la VM sulla rete locale non è l'opzione migliore (ad esempio in una rete di ufficio), la soluzione proposta da @vkostromin mantiene l'incapsulamento della VM all'interno dell'host.
Victor P.

1
@VictorP. puoi spiegare perché non è l'opzione migliore in una rete d'ufficio? È dovuto alla sicurezza o?
mdo123,

1
Pur sapendo che non è l'opzione migliore, nella mia configurazione attuale impostare l'adattatore su bridge è l'unica soluzione che funziona.
James,

69

Mantenere l'adattatore NAT e aggiungere un secondo adattatore solo host funziona in modo sorprendente ed è cruciale per i laptop (dove la rete esterna cambia sempre).

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

Ricordarsi di creare una rete solo host nella stessa virtualbox (GUI -> impostazioni -> rete), altrimenti non è possibile creare l'interfaccia solo host sul guest.


2
Solo questa risposta ha funzionato per me, nient'altro ha funzionato. Inoltre, ho appena aggiunto un adattatore aggiuntivo e ha funzionato, non è stato necessario modificarlo /etc/network/interfaces, grazie!
brokenfoot

3
D'accordo, questa è la risposta migliore. In caso contrario, si sta saltando attraverso cerchi ogni volta che si desidera accedere a un servizio comune ( ssh, sftp, ecc) dal momento che avrebbe dovuto passare attraverso una porta non standard.
Kirk Woll,


1
un'altra buona fonte per la configurazione di 2buntu.com/articles/1513/…
mdo123

1
@Sparkler esegue sshd? Esiste un firewall che chiude le porte?
Orip,

24

È inoltre possibile utilizzare una rete con bridge (o "Bridge Adapter", nelle versioni più recenti) nelle impostazioni di rete . Questo metterà la tua VM in una VLAN con la tua macchina. Quindi puoi semplicemente entrare nella VM in questo modo.

utente ssh @ IP_OF_VM


Con questa soluzione la connessione SSH passa attraverso la LAN?
user2233706

23

Come fare una rete solo host ( meglio di bridge) per Solaris 10 e Ubuntu 16.04

Aggiungi interfaccia solo host

  1. Virtualbox> File> Preferenze> Rete> Reti solo host> Aggiungi
  2. Arresto vm.
  3. Impostazioni VM> Rete. Il primo adattatore dovrebbe essere Nat, solo il secondo host.
  4. Avviare cmd.exe ed eseguirlo ipconfig /all. Dovresti vedere le righe:

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

    Anche il secondo adattatore nel guest dovrebbe essere in 192.168.59. *.

  5. Avvia VM.

Solaris 10

  1. Controlla le impostazioni ifconfig -a . Dovresti vedere e1000g0 ed e1000g1. Siamo interessati a e1000g1.
  2. ifconfig e1000g down
  3. ifconfig e1000g 192.168.56.10 netmask 255.255.255.0 up
  4. Verifica dall'host se questa interfaccia è raggiungibile: ping 192.168.56.10

Conserva queste impostazioni al riavvio

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

Configurare il servizio ssh ( amministrazione ) per accedere come root (non consigliato)

Controlla se ssh è abilitato

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

Modifica / etc / ssh / sshd_config in modo che ci sia

PermitRootLogin yes

Riavvia il servizio ssh

svcadm restart ssh

Da host controlla

ssh root@192.168.56.10

Ubuntu 16.04

Elenco interfacce:

ip addr

Dovresti vedere tre interfacce come lo, enp0s3, enp0s8. Useremo il terzo.

Modifica / etc / network / interfaces

auto enp0s8
iface enp0s8 inet static
    address 192.168.56.10
    netmask 255.255.255.0

Poi sudo ifup enp0s8. Controlla se enp0s8 ha ottenuto l'indirizzo corretto. Dovresti vedere il tuo ip:

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

Altrimenti, puoi correre sudo ifdown enp0s8 && sudo ifup enp0s8

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


3
Questo non funziona se la rete solo host è attiva 192.168.59.1e si specifica 192.168.56.10per l'IP guest statico. L'intero indirizzo di sottorete di classe C deve corrispondere esattamente, quindi dovresti usare qualcosa come 192.168.59.10all'interno dell'ospite.
Domande Quolonel,

16

Per poter eseguire lo ssh su una macchina virtuale Ubuntu in esecuzione in VirtualBox dal computer host, è necessario configurare due adattatori di rete per la macchina virtuale.

Prima di tutto, arrestare la VM se non ancora.

Quindi selezionare la macchina virtuale e fare clic sul menu Impostazioni nella barra degli strumenti VirtualBox:

inserisci qui la descrizione dell'immagine

Imposta adattatore 1

inserisci qui la descrizione dell'immagine

Impostare l'adattatore 2

inserisci qui la descrizione dell'immagine

(Nota: non è necessario impostare alcun port forwarding.)

Questo è tutto. Una volta impostato, puoi avviare la tua VM. Nella tua VM, la configurazione di rete apparirà come di seguito e avrai anche accesso a Internet:

inserisci qui la descrizione dell'immagine

Anche nel tuo computer host, puoi inviare ssh alla tua VM:

inserisci qui la descrizione dell'immagine

Assicurarsi che il server SSH sia stato installato e funzionante nella VM.

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

In caso contrario, installarlo:

$ sudo apt-get install openssh-server

Anche per tua informazione:

  • La mia versione di VirtualBox: 5.2.6 r120293 (Qt5.6.2), 2018
  • La mia versione di Ubuntu: Ubuntu 16.04.3 LTS
  • La mia macchina host: Windows 10

Se non si dispone di un adattatore solo host, è possibile crearne uno da:File > Host Network Manager > Create
Cirelli94

Purtroppo non raggiunge la rete internet
Cirelli94

5
SSH Torna alla tua casa / ufficio VirtualBox Guest Machine da INTERNET

Le risposte fornite da altri utenti qui: How to SSH to a VirtualBox guest externally through a host?

... mi ha aiutato a svolgere il compito di connettermi da fuori Internet al computer ospite del mio computer di casa. Dovresti essere in grado di connetterti utilizzando computer, tablet e smartphone (Android, IPhone, ecc.). Aggiungo qualche altro passaggio nel caso in cui possa essere utile a qualcun altro:

Ecco un breve diagramma della mia configurazione:

  • 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 chiave per me era rendermi conto che TUTTE le connessioni erano PASSING-THROUGHdispositivi intermedi per arrivare dal mio PC remoto alla mia macchina virtuale ospite a casa - Da qui il port forwarding!

Note: * È necessario il client ssh per richiedere una connessione sicura e un server ssh in esecuzione per elaborare la connessione sicura.

  • Inoltrerò la porta 3022 come utilizzata nella risposta scelta dall'alto.

  • Inserisci i tuoi IP dove necessario (modem / router di casa, IP host, IP ospite, ecc.), I nomi scelti sono solo esempi di utilizzo o modifica.

1.Creare tunnel ssh sulla porta 3022 sull'indirizzo IP esterno del tuo modem / router.

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

2.Port forward = stiamo passando attraverso la connessione dal router alla macchina host

  • Assicurati anche che le regole firewall / IPtable sul router consentano di inoltrare le porte (aprire se necessario)

  • Schermate Pfwd del router necessarie: AppName: SSH_Fwd, Port_from: 3022, Protocollo: entrambi (UDP / TCP), indirizzo IP: hostIP_address, Port_to: 3022, tutto il resto può essere vuoto

Risorse / informazioni sul software del router DD-WRT:

3.Host Machine Firewall: la porta aperta 3022 #a porta inoltrata può passare attraverso la macchina ospite

  • Macchina host: installa VirtualBox, aggiunte guest e macchina guest se non ancora fatto

  • Configurare la macchina guest e quindi seguire la sezione Rete di seguito

  • Ho usato la GUI di VirtualBox per configurare la rete del guest, più semplice della CLI

  • Se si desidera utilizzare altri metodi, consultare: VirtualBox/manual/ch06.html#natforward

4. Alcuni suggeriscono di utilizzare l'adattatore Network Bridge per guest = accesso alla LAN e ad altre macchine sulla LAN. Ciò comporta anche un aumento del rischio per la sicurezza, poiché ora la macchina ospite è ora esposta alle macchine LAN e, eventualmente, agli hacker INTERNET se il firewall non è configurato correttamente. Quindi ho selezionato una scheda di rete collegata a NAT per una minore esposizione a rischi per la sicurezza a ponte.

Sulla macchina guest, procedi come segue:

  • Impostazioni di rete VirtualBox Guest Machine: Adattatore 1: collegato a NAT
  • Regola di inoltro porta VirtualBox macchina guest: Nome: External_SSH, protocollo: TCP, porta host: 3022, porta guest 22, IP host e IP guest: lasciare vuoto
  • fai clic su anticipo nella sezione Rete, quindi fai clic su Port forwarding per inserire le regole
  • Guest Machine Firewall: è possibile accedere alla porta aperta 22 # in modo da poter accedere alla connessione SSH
  • Macchina ospite: assicurarsi che il server SSH sia installato, configurato correttamente e in esecuzione
  • Test LINUX per verificare se il server SSH è in esecuzione con il comando: sudo service ssh status
  • Può verificare netstat per vedere se la connessione è stata effettuata alla porta 22 sul computer guest

Inoltre ci sono diversi server e client ssh a seconda dell'utilizzo della piattaforma.

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

Per utenti Ubuntu:

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

Questo dovrebbe essere. Se ho fatto un errore o volessi aggiungere qualcosa, sentiti libero di farlo ... Sono ancora un noob.

Spero che questo aiuti qualcuno. In bocca al lupo!


5

Per l'host Windows, puoi:

  1. Nel gestore di virtualbox:
    1. seleziona ctrl+ Gnel gestore della tua virtualbox,
    2. quindi vai al pannello di rete
    3. aggiungere una rete privata
      1. assicurarsi che ATTIVARE DHCP NON sia selezionato
  2. Nella gestione della rete (windows)
    1. Selezionare l'adattatore solo host virtualbox appena creato e la scheda di rete fisica
    2. Fare clic con il tasto destro e selezionare "Crea bridge"
  3. Godere

4

Puoi anche avviare un port forward sul tuo HOST, O QUALUNQUE ALTRO SERVER, dal tuo Guest. Ciò è particolarmente utile se il tuo Guest è 'bloccato' o non può altrimenti completare l'opzione ModifyVM (es. Nessuna autorizzazione a VBoxManage).

Tre requisiti minori sono 1) sei / puoi accedere al VirtualBox Guest (tramite la GUI 'console', un altro Guest, ecc.), 2) hai un account sul VirtualBox HOST (o altro Server) e 3) SSH e TCP l'inoltro non è bloccato.

Supponendo che tu possa soddisfare i 3 requisiti, questi sono i passaggi:

  1. Sul Guest, eseguire netstat -rne trovare l'indirizzo del gateway verso la destinazione di route predefinita 0.0.0.0. Diciamo che è "10.0.2.2". Questo indirizzo "Gateway" è (uno dei) IP virtuali dell'host VirtualBox.
  2. Sul Guest, eseguire ssh -R 2222:localhost:22 10.0.2.2dove "10.0.2.2" è l'indirizzo IP del server VirtualBox -OPPURE- qualsiasi altro IP server a cui si desidera eseguire il port forwarding.
  3. ssh 10.0.2.2 -p2222Sull'host , eseguire dove 10.0.2.2 è il gateway predefinito / IP virtuale VBHost trovato nel passaggio 1. Se NON è l'host VirtualBox a cui si sta eseguendo il port forwarding, il comando èssh localhost -p2222

4

Seguire i passaggi seguenti per accedere alla macchina virtuale Ubuntu in esecuzione nella scatola virtuale dal computer host utilizzando putty (senza port forwarding):

  1. In Virtualbox Manager selezionare la VM, fare clic sull'icona delle impostazioni. Quindi vai su Reti e abilita due adattatori come di seguito:

    • Adattatore 1 (per l'accesso a Internet): collegato a -> NAT, Avanzato -> Controllare il cavo collegato.
    • Adattatore 2: collegato a -> Adattatore solo host, Avanzato -> Controlla il cavo collegato e Modalità promiscua -> Consenti tutto.
  2. Avvia Ubuntu VM.

  3. Accedi alla VM come root.
  4. Modifica il file '/ etc / network / interfaces' come di seguito e salvalo:

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

  6. Accedere alla VM ed eseguire il comando seguente per verificare l'IP assegnato a eth1:

    ifconfig
    
  7. Utilizzare questo IP per aprire la sessione di mastice per la VM.



2

Ubuntu 18.04 LTS

Configurazione con bridge per vedere l'ip del server e connettersi senza "port forwarding"

VirtualBox> tasto destro del mouse sul server> impostazioni> Rete> abilita adattatore 2> seleziona "a ponte"> Modalità promiscua: consenti tutto> Controlla il cavo collegato> avvia server

Sul server Ubuntu, modifica il sudo nano /etc/netplan/*init.yamlfile,

Il mio file di esempio:

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

Comandi che ti aiuteranno

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

Configurare gli indirizzi IP statici sul server Ubuntu 18.04 LTS - con NetPlan


1

La semplice impostazione di Network Setting su bridge ha fatto il trucco per me.

Il tuo IP cambierà quando lo fai. Tuttavia, nel mio caso non è cambiato immediatamente. ifconfigha restituito lo stesso ip. Ho riavviato vm e boom, l'ip si è impostato su un inizio con 192. * e mi è stato immediatamente consentito l'accesso ssh.


Questa informazione, suppongo, sia parzialmente o addirittura del tutto inesatta in un certo senso generale, non ne ho idea. downvoter non si è preoccupato di dire.
boulder_ruby,

In parole povere, "per alcuni, non funziona".
boulder_ruby,

0

Sulle reti sicure, l'impostazione della rete su bridge potrebbe non funzionare. Gli amministratori potrebbero consentire un solo indirizzo mac per porta o, peggio ancora, bloccare la porta qualora gli switch rilevino più mac su una porta.

La migliore soluzione secondo me è quella di impostare interfacce di rete aggiuntive per gestire servizi aggiuntivi che vorresti eseguire sui tuoi computer. Quindi ho un'interfaccia bridge per consentire il bridging quando porto il mio laptop a casa e posso SSH in esso da altri dispositivi sulla mia rete, nonché un adattatore solo host quando vorrei SSH nella mia VM dal mio laptop quando sono connesso alla rete wifi eduroam nel campus.


0

Utilizzare la scheda di rete NAT e aggiungere il port forward. Indica l'ip host effettivo. Non utilizzare 127.0.0.1 o localhost.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.