Wie kann eine SSH-Verbindung zu einem VirtualBox-Gast extern über einen Host hergestellt werden? [geschlossen]


642

Ich habe eine Ubuntu-VM auf meinem Windows 7-Computer. Wie richte ich es so ein, dass ich über SSH extern auf den Webserver zugreifen kann?

Ich habe Schritte gefunden ( SSH-Zugriff zwischen VirtualBox-Host und Gast-VMs einrichten ), um von meinem Host aus auf meinen Gast zugreifen zu können, aber ich habe immer noch das Problem, über meinen Router darauf zuzugreifen.

Ich nehme an, ich könnte einen SSH-Server auf meinem Windows-Computer installieren und dann einige Male tunneln (obwohl ich nicht 100% sicher bin, was ich in Bezug auf lokale, dynamische usw. verwenden soll oder wie ich mehrere Tunnel einrichten soll?). Aber gibt es eine Möglichkeit, die VM direkt für meinen Router zugänglich zu machen, damit ich direkt darauf portieren kann?


3
Es gibt eine viel einfachere Möglichkeit, dies mit Vagrant zu tun (das sofort einsatzbereite VMs (ssh-accessable, ip-accessable) aus einer Konfigurationsdatei oder einer GUI erstellt). Ich kenne Ihren Anwendungsfall nicht, aber ich habe ein umfangreiches Tutorial zum Erstellen einer ssh-zugänglichen Ubuntu-Server-VM mit Vagrant geschrieben , das nützlich ist, wenn Sie eine LAMP-basierte Entwicklungsmaschine einrichten möchten.
Sliq

1
Vagrant ist ein großartiges Tool, aber es ist nicht kompatibel mit den neueren Versionen von virtualbox
LizH

2
Die beste Antwort ist weiter unten: stackoverflow.com/a/10410527/2214806
Michael


Es könnte nützlich sein, einen neuen, spezifischen Ort zu haben, an dem über Virtualisierungsbereich gesprochen werden kann51.meta.stackexchange.com/questions/28201/…
Realtebo

Antworten:


1306

Der beste Weg, sich bei einer Linux-VirtualBox-Gast-VM anzumelden, ist die Portweiterleitung . Standardmäßig sollten Sie bereits eine Schnittstelle haben, die NAT verwendet . Gehen Sie dann zu den Netzwerkeinstellungen und klicken Sie auf die Schaltfläche Portweiterleitung . Fügen Sie eine neue Regel hinzu . Geben Sie als Regelnamen "ssh" ein. Fügen Sie als "Host-Port" 3022 ein. Geben Sie als "Gast-Port" 22 ein. Alles andere in der Regel kann leer gelassen werden.

oder über die Kommandozeile

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

Dabei ist 'myserver' der Name der erstellten VM. Überprüfen Sie die hinzugefügten Regeln:

VBoxManage showvminfo myserver | grep 'Rule'

Das ist alles! Bitte vergessen Sie nicht, einen SSH- Server in der VM zu installieren :

sudo apt-get install openssh-server

Schreiben Sie zum SSH in die Gast-VM:

ssh -p 3022 user@127.0.0.1

Wo userist Ihr Benutzername in der VM?


24
@Keyslinger, ist es das, wonach du gesucht hast? ssh -p 3022 user@127.0.0.1 Das war der einzige Schritt, den ich vermisst habe und den ich einfach auf einer anderen Seite gefunden habe.
D. Woods

10
Ich habe auch die Portumleitung von 2020 auf 80 hinzugefügt, damit ich mit 192.0.0.1:2020 problemlos über den Browser auf Apache zugreifen kann . VBoxManage modifyvm myserver --natpf1 "ssh, tcp ,, 2020 ,, 80"
Eduardo Russo

4
thebigdog, können Sie direkt kopflos: VBoxHeadless -s 'vmname'
vkostromin

4
Warum verwenden wir Port 3022 und nicht den Standard 22?
Seraphim

3
Um das Leben einfacher zu machen, öffnen Sie ~ / .ssh / config, fügen Sie der Host mybox HostName 127.0.0.1 User myuser Port 3022Datei Folgendes hinzu (fügen Sie selbst einen Einzug hinzu), dann müssen Sie nur ssh myboxjedes Mal :)
vancexu

128

Ändern Sie den Adaptertyp in VirtualBox in "Bridged" und legen Sie fest, dass der Gast DHCP verwendet, oder legen Sie eine statische IP-Adresse außerhalb der Grenzen von DHCP fest. Dadurch verhält sich die virtuelle Maschine wie ein normaler Gast in Ihrem Heimnetzwerk. Sie können dann vorwärts portieren.


2
Irgendeine Idee, wie die Konfiguration mit 2 Adaptern funktioniert? Eine auf NAT und eine andere nur auf Host?
CantGetANick

16
Meiner Meinung nach ist es nicht die beste Option, die VM im lokalen Netzwerk verfügbar zu machen (z. B. in einem Büronetzwerk). Die von @vkostromin vorgeschlagene Lösung behält die Kapselung der VM im Host bei.
Victor P.

1
@ VictorP. Können Sie bitte erklären, warum dies nicht die beste Option in einem Büronetzwerk ist? Liegt es an der Sicherheit oder?
mdo123

Selbst wenn ich weiß, dass dies nicht die beste Option ist, ist in meiner aktuellen Konfiguration der Adapter auf Bridged die einzige Lösung, die funktioniert.
James

68

Das Beibehalten des NAT-Adapters und das Hinzufügen eines zweiten Nur-Host-Adapters funktioniert hervorragend und ist für Laptops von entscheidender Bedeutung (bei denen sich das externe Netzwerk immer ändert).

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

Denken Sie daran, ein Nur-Host-Netzwerk in der Virtualbox selbst zu erstellen (GUI -> Einstellungen -> Netzwerk), da Sie sonst keine Nur-Host-Schnittstelle für den Gast erstellen können.


2
Nur diese Antwort hat bei mir funktioniert, sonst nichts. Außerdem habe ich gerade einen zusätzlichen Adapter hinzugefügt und es hat funktioniert, musste nicht bearbeitet werden /etc/network/interfaces, danke!
gebrochener Fuß

3
Einverstanden ist dies die beste Antwort. Ansonsten, du bist durch Reifen springen jedes Mal , wenn Sie einen gemeinsamen Dienst zugreifen möchten ( ssh, sftpusw.) , da Sie durch einen Nicht-Standard - Port gehen müssten.
Kirk Woll


1
eine weitere gute Quelle für die Einrichtung 2buntu.com/articles/1513/…
mdo123

1
@ Parkler läuft sshd? Gibt es eine Firewall, die Ports schließt?
Orip

23

So erstellen Sie ein Nur-Host-Netzwerk ( besser als Bridged) für Solaris 10 und Ubuntu 16.04

Nur-Host-Schnittstelle hinzufügen

  1. Virtualbox> Datei> Einstellungen> Netzwerk> Nur-Host-Netzwerke> Hinzufügen
  2. Herunterfahren vm.
  3. VMs Einstellungen> Netzwerk. Der erste Adapter sollte Nat sein, der zweite nur Host.
  4. Starten Sie cmd.exe und führen Sie es aus ipconfig /all. Sie sollten Linien sehen:

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

    Der zweite Adapter im Gast sollte ebenfalls 192.168.59 sein. *.

  5. Starten Sie die VM.

Solaris 10

  1. Überprüfen Sie die Einstellungen ifconfig -a . Sie sollten e1000g0 und e1000g1 sehen. Wir interessieren uns für e1000g1.
  2. ifconfig e1000g down
  3. ifconfig e1000g 192.168.56.10 netmask 255.255.255.0 up
  4. Überprüfen Sie vom Host aus, ob diese Schnittstelle erreichbar ist: ping 192.168.56.10

Behalten Sie diese Einstellungen beim Neustart bei

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

Konfigurieren Sie den SSH- Dienst ( Verwaltung ) so, dass er sich als Root anmeldet (nicht empfohlen).

Überprüfen Sie, ob ssh aktiviert ist

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

Ändern Sie / etc / ssh / sshd_config so, wie es ist

PermitRootLogin yes

Starten Sie den SSH-Dienst neu

svcadm restart ssh

Vom Host überprüfen

ssh root@192.168.56.10

Ubuntu 16.04

Schnittstellen auflisten:

ip addr

Sie sollten drei Schnittstellen wie lo, enp0s3, enp0s8 sehen. Wir werden den dritten verwenden.

Bearbeiten Sie / etc / network / interfaces

auto enp0s8
iface enp0s8 inet static
    address 192.168.56.10
    netmask 255.255.255.0

Dann sudo ifup enp0s8. Überprüfen Sie, ob enp0s8 die richtige Adresse hat. Sie sollten Ihre IP sehen:

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

Wenn nicht, können Sie laufen sudo ifdown enp0s8 && sudo ifup enp0s8

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


3
Dies funktioniert nicht, wenn Ihr Nur-Host-Netzwerk aktiviert ist 192.168.59.1und Sie 192.168.56.10die statische Gast-IP angeben . Die gesamte Subnetzadresse der Klasse C muss genau übereinstimmen, sodass Sie 192.168.59.10stattdessen so etwas wie innerhalb des Gasts verwenden müssten .
Quolonel Fragen

22

Sie können in den Netzwerkeinstellungen auch ein Bridged Network (oder in neueren Versionen "Bridge Adapter") verwenden . Dadurch wird Ihre VM mit Ihrem Computer in ein VLAN gestellt. Sie können also einfach so in die VM ssh.

ssh user @ IP_OF_VM


Geht die SSH-Verbindung mit dieser Lösung über das LAN?
user2233706

16

Um von Ihrem Host-Computer aus auf eine Ubuntu-VM zuzugreifen, die in VirtualBox ausgeführt wird, müssen Sie zwei Netzwerkadapter für die VM einrichten.

Stoppen Sie zunächst die VM, falls noch nicht geschehen.

Wählen Sie dann die VM aus und klicken Sie in der VirtualBox-Symbolleiste auf das Menü Einstellungen:

Geben Sie hier die Bildbeschreibung ein

Adapter 1 einrichten

Geben Sie hier die Bildbeschreibung ein

Adapter 2 einrichten

Geben Sie hier die Bildbeschreibung ein

(Hinweis: Sie müssen keine Portweiterleitung einrichten.)

Das ist es. Nach dem Einrichten können Sie Ihre VM starten. In Ihrer VM sieht die Netzwerkkonfiguration wie folgt aus und Sie haben auch Internetzugang:

Geben Sie hier die Bildbeschreibung ein

Auch auf Ihrem Host-Computer können Sie auf Ihre VM ssh:

Geben Sie hier die Bildbeschreibung ein

Stellen Sie sicher, dass der SSH-Server in der VM installiert ist und ausgeführt wird.

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

Wenn nicht, installieren Sie es:

$ sudo apt-get install openssh-server

Auch zu Ihrer Information:

  • Meine VirtualBox-Version: 5.2.6 r120293 (Qt5.6.2), 2018
  • Meine Ubuntu-Version: Ubuntu 16.04.3 LTS
  • Mein Host-Computer: Windows 10

Wenn Sie keinen Nur-Host-Adapter haben, können Sie einen erstellen aus:File > Host Network Manager > Create
Cirelli94

Es erreicht das Internet-Netzwerk leider nicht
Cirelli94

5
SSH Zurück zu Ihrem Home / Office VirtualBox-Gastcomputer aus dem Internet

Die Antworten anderer Benutzer hier: How to SSH to a VirtualBox guest externally through a host?

... hat mir geholfen, die Aufgabe zu erfüllen, eine Verbindung von außerhalb des Internets zum Gastcomputer meines Heimcomputers herzustellen. Sie sollten in der Lage sein, eine Verbindung über Computer, Tablets und Smartphones (Android, IPhone usw.) herzustellen. Ich füge noch ein paar Schritte hinzu, falls es für jemand anderen hilfreich sein könnte:

Hier ist ein kurzes Diagramm meines Setups:

  • 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)

Der Schlüssel für mich war zu erkennen, dass ALLE Verbindungen PASSING-THROUGHZwischengeräte waren, um von meinem Remote-PC zu meiner virtuellen Gastmaschine zu Hause zu gelangen - Hence-Port-Weiterleitung!

Hinweise: * Der SSH-Client muss eine sichere Verbindung anfordern, und ein laufender SSH-Server muss die sichere Verbindung verarbeiten.

  • Ich werde den Port 3022 weiterleiten, wie er in der gewählten Antwort von oben verwendet wurde.

  • Geben Sie bei Bedarf Ihre IP-Adressen ein (Heimmodem / Router, Host-IP, Gast-IP usw.). Die ausgewählten Namen sind nur Beispiele für die Verwendung oder Änderung.

1.Erstellen Sie einen SSH-Tunnel zu Port 3022 auf der externen IP-Adresse Ihres Modems / Routers.

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

2.Port Forward = Wir leiten die Verbindung vom Router zum Host-Computer weiter

  • Stellen Sie außerdem sicher, dass die Firewall- / IPtable-Regeln auf dem Router zulassen, dass Ports weitergeleitet werden (bei Bedarf geöffnet).

  • Für den Pfwd-BILDSCHIRM des Routers sind folgende Einträge erforderlich: AppName: SSH_Fwd, Port_from: 3022, Protokoll: beide (UDP / TCP), IP_Adresse: hostIP_Adresse, Port_to: 3022, alles andere kann leer sein

Ressourcen der DD-WRT-Router-Software / Info:

3. Hostcomputer-Firewall: Öffnen Sie den Port 3022, damit der weitergeleitete Port an den Gastcomputer weitergeleitet werden kann

  • Hostcomputer: Installieren Sie VirtualBox, Gastzugaben und Gastcomputer, falls dies noch nicht geschehen ist

  • Konfigurieren Sie den Gastcomputer und folgen Sie dem Abschnitt Netzwerk unten

  • Ich habe die VirtualBox-Benutzeroberfläche verwendet, um das Netzwerk des Gastes einfacher einzurichten als die CLI

  • Wenn Sie andere Methoden verwenden möchten, lesen Sie: VirtualBox/manual/ch06.html#natforward

4. Einige schlagen vor, den Network Bridge-Adapter für den Gastzugriff auf LAN und andere Computer in Ihrem LAN zu verwenden. Dies stellt auch ein erhöhtes Sicherheitsrisiko dar, da Ihr Gastcomputer jetzt LAN-Computern und möglicherweise den INTERNET-Hackern ausgesetzt ist, wenn die Firewall nicht ordnungsgemäß eingerichtet wurde. Daher habe ich den an NAT angeschlossenen Netzwerkadapter ausgewählt, um weniger überbrückten Sicherheitsrisiken ausgesetzt zu sein.

Gehen Sie auf dem Gastcomputer wie folgt vor:

  • VirtualBox-Netzwerkeinstellungen des Gastcomputers: Adapter 1: An NAT angeschlossen
  • VirtualBox-Portweiterleitungsregel für Gastcomputer: Name: External_SSH, Protokoll: TCP, Hostport: 3022, Gastport 22, Host- und Gast-IPs: Leer lassen
  • Klicken Sie im Abschnitt Netzwerk auf Erweitern und dann auf Portweiterleitung, um Regeln einzugeben
  • Gastcomputer-Firewall: Open Port 22 #so SSH-Verbindung kann eintreten
  • Gastcomputer: Stellen Sie sicher, dass der SSH-Server installiert, ordnungsgemäß konfiguriert und ausgeführt wird
  • LINUX-Test, um festzustellen, ob der SSH-Server mit dem folgenden Befehl ausgeführt wird: sudo service ssh status
  • Kann netstat überprüfen, um festzustellen, ob eine Verbindung zu Port 22 auf dem Gastcomputer hergestellt wurde

Außerdem gibt es je nach Plattform unterschiedliche SSH-Server und -Clients.

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

Für Ubuntu-Benutzer:

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

Das sollte es sein. Wenn ich einen Fehler gemacht habe oder etwas hinzufügen möchte - fühle mich frei dazu -, bin ich immer noch ein Noob.

Hoffe das hilft jemandem. Viel Glück!


5

Für Windows-Hosts können Sie:

  1. Im Virtualbox-Manager:
    1. Wählen Sie ctrl+ Gin Ihrem VirtualBox - Manager,
    2. Gehen Sie dann zum Netzwerk-Pannel
    3. Fügen Sie ein privates Netzwerk hinzu
      1. Stellen Sie sicher, dass DHCP aktivieren NICHT ausgewählt ist
  2. In der Netzwerkverwaltung (Windows)
    1. Wählen Sie den neu erstellten Virtualbox-Host-Adapter und die physische Netzwerkkarte aus
    2. Klicken Sie mit der rechten Maustaste und wählen Sie "Brücke erstellen".
  3. Genießen

4

Sie können auch einen Port von Ihrem Gast zu Ihrem Host oder einem anderen Server weiterleiten. Dies ist besonders nützlich, wenn Ihr Gast "gesperrt" ist oder die ModifyVM-Option nicht anderweitig ausführen kann (z. B. keine Berechtigung für VBoxManage).

Drei kleinere Anforderungen sind: 1) Sie sind / können sich beim VirtualBox-Gast anmelden (über die Konsolen-GUI, einen anderen Gast usw.), 2) Sie haben ein Konto auf dem VirtualBox-Host (oder einem anderen Server) und 3) SSH und TCP Weiterleitung ist nicht blockiert.

Vorausgesetzt, Sie können die drei Anforderungen erfüllen, sind dies die folgenden Schritte:

  1. Führen Sie auf dem Gast netstat -rndie Gateway-Adresse zum Standardroutenziel 0.0.0.0 aus und suchen Sie sie. Angenommen, es ist "10.0.2.2". Diese 'Gateway'-Adresse ist eine der virtuellen IP-Adressen des VirtualBox-Hosts.
  2. Führen Sie auf dem Gast aus, ssh -R 2222:localhost:22 10.0.2.2wobei "10.0.2.2" die IP-Adresse des VirtualBox-Servers ist - ODER - jede andere Server-IP, an die Sie weiterleiten möchten.
  3. Führen Sie auf dem Host aus, ssh 10.0.2.2 -p2222wobei 10.0.2.2 die in Schritt 1 gefundene virtuelle Standard-Gateway- / VBHost-IP ist. Wenn es sich NICHT um den VirtualBox-Host handelt, an den Sie den Port weiterleiten, lautet der Befehlssh localhost -p2222

4

Führen Sie die folgenden Schritte aus, um sich mit Putty (ohne Portweiterleitung) bei Ihrer Ubuntu-VM anzumelden, die in einer virtuellen Box vom Hostcomputer ausgeführt wird:

  1. Wählen Sie im Virtualbox-Manager die VM aus und klicken Sie auf das Einstellungssymbol. Gehen Sie dann zu Netzwerke und aktivieren Sie zwei Adapter wie folgt:

    • Adapter 1 (Für Internetzugang): An -> NAT, Erweitert -> Überprüfen Sie das angeschlossene Kabel.
    • Adapter 2: An -> Nur Host-Adapter angeschlossen, Erweitert -> Überprüfen Sie das angeschlossene Kabel und den Promiscuous-Modus -> Alle zulassen.
  2. Starten Sie das Ubuntu VM.

  3. Melden Sie sich bei der VM als root an.
  4. Bearbeiten Sie die Datei '/ etc / network / interfaces' wie folgt und speichern Sie sie:

    auto lo
    iface lo inet loopback
    
    auto eth0
    iface eth0 inet dhcp
    
    auto eth1
    iface eth1 inet dhcp
    
  5. Starten Sie die VM neu.

  6. Melden Sie sich bei der VM an und führen Sie den folgenden Befehl aus, um die eth1 zugewiesene IP zu überprüfen:

    ifconfig
    
  7. Verwenden Sie diese IP, um eine Kitt-Sitzung für die VM zu öffnen.



2

Ubuntu 18.04 LTS

Konfiguration mit Bridged, um die Server-IP zu sehen und eine Verbindung ohne "Portweiterleitung" herzustellen

VirtualBox> Klicken Sie mit der rechten Maustaste auf Server> Einstellungen> Netzwerk> Adapter 2 aktivieren> Wählen Sie "Bridged"> Promiscuous-Modus: Alle zulassen> Überprüfen Sie das angeschlossene Kabel> Starten Sie den Server

Bearbeiten Sie auf dem Ubuntu-Server die sudo nano /etc/netplan/*init.yamlDatei,

Meine Beispieldatei:

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

Befehle, die Ihnen helfen

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

Konfigurieren Sie statische IP-Adressen unter Ubuntu 18.04 LTS Server - mit NetPlan


0

Das einfache Einstellen der Netzwerkeinstellung auf "Überbrückt" hat mir geholfen.

Ihre IP ändert sich dabei. In meinem Fall hat sich dies jedoch nicht sofort geändert. ifconfiggab die gleiche IP zurück. Ich habe die VM und den Boom neu gestartet, die IP hat sich mit 192 auf einen Start eingestellt. * Und mir wurde sofort der SSH-Zugriff gewährt.


Diese Informationen, die ich vermute, sind im Allgemeinen teilweise oder sogar ganz ungenau, ich habe keine Ahnung. Downvoter machte sich nicht die Mühe zu sagen.
boulder_ruby

"Für einige funktioniert es nicht."
boulder_ruby

0

In sicheren Netzwerken funktioniert das Einstellen Ihres Netzwerks auf Bridge möglicherweise nicht. Administratoren konnten nur eine Mac-Adresse pro Port zulassen oder, noch schlimmer, den Port blockieren, wenn die Switches mehrere Macs an einem Port erkennen.

Meiner Meinung nach ist die beste Lösung, zusätzliche Netzwerkschnittstellen einzurichten, um zusätzliche Dienste zu verwalten, die Sie auf Ihren Computern ausführen möchten. Ich habe also eine Bridge-Schnittstelle, die das Bridging ermöglicht, wenn ich meinen Laptop mit nach Hause nehme und von anderen Geräten in meinem Netzwerk SSH-fähig bin, sowie einen Host-Adapter, wenn ich von meinem Laptop aus eine SSH-Verbindung zu meiner VM herstellen möchte, wenn ich verbunden bin zum eduroam wifi netzwerk auf dem campus.


0

Verwenden Sie den NAT-Netzwerkadapter und fügen Sie den Port weiter. Erwähnen Sie die tatsächliche Host-IP. Verwenden Sie nicht 127.0.0.1 oder localhost.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.