Як SSH гостю VirtualBox зовні через хост? [зачинено]


643

У мене на комп'ютері Windows 7 працює Ubuntu VM. Як налаштувати його, щоб я мав доступ до веб-сервера зовні через SSH?

Я знайшов кроки ( Налаштування доступу до SSH між VirtualBox Host та Guest VM ), щоб я міг перейти до мого гостя від свого хоста, але це все ще залишає мені проблему доступу до нього через мій маршрутизатор.

Я думаю, що я міг би встановити SSH-сервер на свою машину Windows, а потім кілька разів тунелювати (хоча я не на 100% впевнений, що використовувати в плані локальних, динамічних тощо або як налаштувати кілька тунелів?), але чи є спосіб зробити VM безпосередньо доступним до мого маршрутизатора, щоб я міг напряму переправити його вперед?


3
Існує набагато простіший спосіб зробити це за допомогою Vagrant (який створює готові до запуску VM (ssh-access, ip-accessable) з конфігураційного файлу або GUI). Я не знаю вашої справи використання, але я написав великий підручник про те, як створити доступ до ssh-сервера Ubuntu VM-сервера з Vagrant , корисний, коли ви хочете налаштувати машину розробки на основі LAMP.
Sliq

1
Vagrant - чудовий інструмент, але він не сумісний із більш новими версіями virtualbox
LizH

2
Найкраща відповідь - далі: stackoverflow.com/a/10410527/2214806
Майкл

Ви можете перевірити цей підручник wiki.workassis.com/virtualbox-ssh-between-host-and-guest
Bikesh M

Думаю, може бути корисним мати нове, вказане місце, де можна говорити про область віртуалізації51.meta.stackexchange.com/ questions/28201/…
realtebo

Відповіді:


1307

Найкращий спосіб увійти в гостьовий Linux VirtualBox VM - це переадресація портів . За замовчуванням у вас уже має бути один інтерфейс, який використовує NAT . Потім перейдіть до налаштувань мережі та натисніть кнопку « Порт пересилання ». Додайте нове правило . Як назву правила вставте "ssh". Як "Порт хоста" вставте 3022. Як "Порт гостя" вставте 22. Все інше правила може бути порожнім.

або з командного рядка

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

де 'myserver' - ім’я створеного VM. Перевірте додані правила:

VBoxManage showvminfo myserver | grep 'Rule'

Це все! Будьте впевнені, що ви не забудете встановити SSH- сервер у VM:

sudo apt-get install openssh-server

Щоб SSH у гостьовий VM, напишіть:

ssh -p 3022 user@127.0.0.1

Де userваше ім’я користувача у віртуальній машині.


24
@Keyslinger, це те, що ти шукав? ssh -p 3022 user@127.0.0.1 Це був один крок, який мені не вистачало, і я просто пішов знайти на іншому сайті.
Д. Вудс

10
Я також додав переадресацію порту з 2020 року на 80, тому я можу легко отримати доступ до Apache з браузера за допомогою 192.0.0.1:2020 . VBoxManage modifyvm myserver --natpf1 "ssh, tcp ,, 2020,, 80"
Едуардо Руссо

4
thebigdog, ви можете без голови прямо: VBoxHeadless -s 'vmname'
vkostromin

4
Чому ми використовуємо порт 3022, а не 22 за замовчуванням?
Серафим

3
Щоб полегшити життя, відкрийте ~ / .ssh / config, додайте Host mybox HostName 127.0.0.1 User myuser Port 3022до цього файлу (додайте відступ самостійно), тоді вам потрібно лише ssh myboxкожен раз :)
vancexu

128

Змініть тип адаптера в VirtualBox на мости і встановіть гостям використання DHCP або встановлення статичної IP-адреси поза межами DHCP. Це призведе до того, що Віртуальна машина буде працювати як звичайний гість у вашій домашній мережі. Потім ви можете перенести порт вперед.


2
Будь-яка ідея, як буде працювати конфігурація 2 адаптера? Один на NAT та інший лише на хості?
CantGetANick

16
На мій погляд, виведення VM в локальну мережу - не найкращий варіант (наприклад, в офісній мережі), рішення, запропоноване @vkostromin, зберігає інкапсуляцію VM в хості.
Віктор П.

1
@VictorP. Ви можете пояснити, чому це не найкращий варіант в офісній мережі? Це пов’язано з безпекою чи?
mdo123

1
Навіть знаючи, що це не найкращий варіант, у моїй теперішній конфігурації встановити адаптер на мости - це єдине рішення, яке працює.
Джеймс

68

Зберігання NAT-адаптера та додавання другого лише адаптера працює просто вражаючим і має вирішальне значення для ноутбуків (де зовнішня мережа завжди змінюється).

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

Не забудьте створити мережу, що веде лише для господарів, у самому віртуальному вікні (GUI -> налаштування -> мережа), інакше ви не можете створити інтерфейс для гостя лише для гостя.


2
Тільки ця відповідь спрацювала для мене, більше нічого не зробила. Крім того, я тільки що додав додатковий адаптер, і він працював, не потрібно було редагувати /etc/network/interfaces, Дякую!
ламаний

3
Погодився, це найкраща відповідь. В іншому випадку, ви стрибки через обручі кожен раз , коли ви хочете отримати доступ до загальної службі ( ssh, sftpі т.д.) , так як вам доведеться пройти через нестандартний порт.
Кірк Волл

1
Я вважаю за краще посилання на Інтернет-архів: web.archive.org/web/20160523035053/https://muffinresearch.co.uk/… - web.archive.org/web/20170701174835/http://christophermaier.name/… є ще одне добре пояснення.
Бен Крізі

1
ще одне хороше джерело для налаштування цього 2buntu.com/articles/1513/…
mdo123

1
@Sparkler працює sshd? Чи є порти брандмауера, що закриваються?
Оріп

23

Як зробити мережу лише для хостів ( краще, ніж мости) для Solaris 10 та Ubuntu 16.04

Додайте інтерфейс лише для хостів

  1. Віртуальний ящик> Файл> Налаштування> Мережа> Мережі, що приймаються лише для хоста> Додати
  2. Вимкнення vm.
  3. Налаштування VM> Мережа. Перший адаптер повинен бути Nat, другий лише хост.
  4. Запустіть cmd.exe і запустіть ipconfig /all. Ви повинні побачити рядки:

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

    Другий адаптер у гості також повинен бути у 192.168.59. *.

  5. Запуск VM.

Соляріс 10

  1. Перевірте налаштування ifconfig -a . Ви повинні побачити e1000g0 та e1000g1. Ми зацікавлені в e1000g1.
  2. ifconfig e1000g down
  3. ifconfig e1000g 192.168.56.10 netmask 255.255.255.0 up
  4. Перевірте у хоста, чи доступний цей інтерфейс: ping 192.168.56.10

Збережіть ці налаштування при перезавантаженні

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

Налаштуйте службу ssh ( адміністрування ) для входу як root (не надається)

Перевірте, чи ввімкнено ssh

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

Змініть / etc / ssh / sshd_config, щоб було

PermitRootLogin yes

Перезапустіть службу ssh

svcadm restart ssh

Перевірте це від господаря

ssh root@192.168.56.10

Ubuntu 16.04

Список інтерфейсів:

ip addr

Ви повинні побачити три інтерфейси, такі як lo, enp0s3, enp0s8. Ми будемо використовувати третій.

Редагувати / тощо / мережу / інтерфейси

auto enp0s8
iface enp0s8 inet static
    address 192.168.56.10
    netmask 255.255.255.0

Потім sudo ifup enp0s8. Перевірте, чи enp0s8 отримав правильну адресу. Ви повинні побачити свій ip:

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

Якщо ні, ви можете бігти sudo ifdown enp0s8 && sudo ifup enp0s8

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


3
Це не працює, якщо увімкнено лише мережу, 192.168.59.1і ви вказали 192.168.56.10для статичного IP гостя. Вся підмережа класу C повинна точно збігатися, тому вам доведеться використовувати щось на зразок 192.168.59.10всередині гостя.
питання Quolonel

22

Ви також можете використовувати мостикову мережу (або "адаптер мосту", у нових версіях) у мережевих налаштуваннях . Це дозволить поставити ваш VM у мережу VLAN разом із вашою машиною. Таким чином, ви можете просто ssh у VM, як це.

ssh користувач @ IP_OF_VM


За допомогою цього рішення проходить з'єднання SSH через локальну мережу?
користувач2233706

16

Для того, щоб ssh на Vbuntu VM, що працює у VirtualBox з вашого хост-машини, вам потрібно встановити два мережевих адаптери для VM.

Перш за все, зупиніть VM, якщо ще немає.

Потім виберіть VM і натисніть меню Налаштування на панелі інструментів VirtualBox:

введіть тут опис зображення

Налаштування адаптера 1

введіть тут опис зображення

Налаштування адаптера 2

введіть тут опис зображення

(Примітка. Вам не потрібно встановлювати переадресацію портів.)

Це воно. Після налаштування ви можете запустити свій VM. У вашому відеобслуживанні мережева конфігурація виглядатиме нижче, і ви також матимете доступ до Інтернету:

введіть тут опис зображення

Також у вашій хост-машині ви можете отримати ssh на свій VM:

введіть тут опис зображення

Переконайтеся, що SSH-сервер встановлений і працює в VM.

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

Якщо ні, встановіть його:

$ sudo apt-get install openssh-server

Також для вашої інформації:

  • Моя версія VirtualBox: 5.2.6 r120293 (Qt5.6.2), 2018 рік
  • Моя версія Ubuntu: Ubuntu 16.04.3 LTS
  • Мій хост-апарат: Windows 10

Якщо у вас немає адаптера, призначеного лише для господарів, його можна створити з:File > Host Network Manager > Create
Cirelli94

На жаль, не доходить до мережі Інтернет
Cirelli94

5
SSH Повернутися до гостьової машини для домашнього офісу / VirtualBox від INTERNET

Відповіді, надані іншими користувачами тут: How to SSH to a VirtualBox guest externally through a host?

... допоміг мені виконати завдання підключення з Інтернету до гостьової машини мого домашнього комп’ютера. Ви повинні мати змогу підключатися за допомогою комп’ютерів, планшетів та смартфонів (android, IPhone тощо). Я додаю ще кілька кроків на випадок, якщо це може бути корисним комусь іншому:

Ось коротка схема мого налаштування:

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

Для мене ключовим було усвідомлення того, що ВСІ з'єднання - це PASSING-THROUGHпосередницькі пристрої, щоб дістатися зі свого віддаленого ПК до моєї гостьової віртуальної машини вдома - звідси переадресація портів!

Примітки: * Потрібен ssh-клієнт для запиту захищеного з'єднання та запущеного ssh-сервера для обробки захищеного з'єднання.

  • Я перешлю порт 3022, як використовується в обраній відповіді зверху.

  • Введіть свої IP-адреси там, де це потрібно (домашній модем / маршрутизатор, IP-хост, IP гостя тощо), вибрані імена - лише приклади використання або зміни.

1.Створіть ssh-тунель до порту 3022 на зовнішній IP-адресі вашого модема / маршрутизатора.

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

2.Порт вперед = ми проходимо через з'єднання від маршрутизатора до хост-машини

  • Також переконайтеся, що правила брандмауера / IPtable маршрутизатора дозволяють портам переадресовувати (відкрити, якщо потрібно)

  • Необхідні записи PFWD для маршрутизатора: AppName: SSH_Fwd, Port_from: 3022, Протокол: обидва (UDP / TCP), IP_address: hostIP_address, Port_to: 3022, все інше може бути порожнім

Ресурси програмного забезпечення маршрутизатора DD-WRT / Інформація:

3. Брандмауер найвищої машини: відкритий порт 3022 перенаправлений порт може передаватися через гостьову машину

  • Хост-машина: Встановіть VirtualBox, додатки для гостей та гостьову машину, якщо цього ще не зроблено

  • Налаштуйте гостьову машину та виконайте наведений нижче розділ Мережа

  • Я використовував GUI VirtualBox для налаштування мережі гостей - простіше, ніж CLI

  • Якщо ви хочете використовувати інші методи, зверніться до: VirtualBox/manual/ch06.html#natforward

4. Деякі пропонують використовувати адаптер Network Bridge для гостя = доступ до локальної мережі та інших машин вашої локальної мережі. Це також означає ризик для безпеки, оскільки тепер ваша гостьова машина наражається на локальні машини та, можливо, на хакери INTERNET, якщо брандмауер не налаштований належним чином. Тому я вибрав мережевий адаптер, приєднаний до NAT, для меншої дії мостових ризиків безпеки.

На гостьовій машині зробіть наступне:

  • Налаштування мережі VirtualBox для гостьової машини: Адаптер 1: Додано до NAT
  • Правило переадресації порту для гостьової машини: Ім'я: External_SSH, Протокол: TCP, Порт хоста: 3022, Порт для гостей 22, IP-адреси хоста та гостя: залишити порожнім
  • натисніть заздалегідь у розділі «Мережа», а потім - «Переадресація порту», ​​щоб ввести правила
  • Брандмауер для гостьової машини: відкритий порт 22 #so ssh з'єднання може вступити
  • Гостьова машина: Переконайтесь, що ssh-сервер встановлений, правильно налаштований та працює
  • Тест LINUX, щоб перевірити, чи працює ssh-сервер w / command: статус sudo служби ssh
  • Можна перевірити netstat, щоб побачити, чи встановлено з'єднання з портом 22 на машині для гостей

Також існують різні ssh-сервери та клієнти залежно від використання платформи.

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

Для користувачів Ubuntu:

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

Це повинно бути. Якщо я помилився або хочу додати що-небудь, я почуваюсь вільним - це я все-таки нуб.

Сподіваюся, що це комусь допоможе. Удачі!


5

Для хоста Windows ви можете:

  1. У віртуальний менеджер:
    1. виберіть ctrl+ Gу своєму менеджері віртуальних скриньок,
    2. потім перейдіть до панелі мережі
    3. додати приватну мережу
      1. переконайтесь, що активація DHCP НЕ обрана
  2. В управлінні мережею (windows)
    1. Виберіть новостворений адаптер, який підтримує лише хостинг, і фізичну мережеву карту
    2. Клацніть правою кнопкою миші та виберіть "Зробити міст"
  3. Насолоджуйтесь

4

Ви також можете ініціювати порт до свого господаря, або будь-якого іншого сервера, від вашого гостя. Це особливо корисно, якщо ваш гість 'заблокований' або не може іншим способом виконати опцію ModifyVM (наприклад, немає дозволу на VBoxManage).

Три незначні вимоги: 1) ви / можете увійти в гость VirtualBox (через GUI 'консолі', інший гість і т. Д.), 2) у вас є обліковий запис у VirtualBox HOST (або іншому сервері), і 3) SSH і TCP пересилання не заблоковано.

Припускаючи, що ви можете виконати 3 вимоги, це такі дії:

  1. На Гість, запустіть netstat -rnі знайдіть адресу шлюзу до місця призначення маршруту за замовчуванням 0.0.0.0. Скажімо, це "10.0.2.2". Ця адреса "шлюзу" - це (одна з) віртуальних IP-адрес хостів VirtualBox.
  2. На Гість, запустіть, ssh -R 2222:localhost:22 10.0.2.2де "10.0.2.2" - IP-адреса сервера VirtualBox -OR- будь-який інший IP-сервер, на який ви хочете переслати порт.
  3. На ssh 10.0.2.2 -p2222хості запустіть там, де 10.0.2.2 є шлюзом за замовчуванням / віртуальним IP-адресом VBHost, знайденим на кроці 1. Якщо це НЕ той хор VirtualBox, на який ви пересилаєте порт, тоді команда:ssh localhost -p2222

4

Виконайте нижче кроки, щоб увійти до вашої VM ubuntu, що працює у віртуальному вікні з хост-машини за допомогою шпаклівки (Без переадресації портів):

  1. У менеджері Virtualbox виберіть vm, натисніть на значок налаштувань. Потім перейдіть до Мереж та включіть два адаптери, як показано нижче:

    • Адаптер 1 (для доступу до Інтернету): Приєднано до -> NAT, Додатково -> Перевірте підключення кабелю.
    • Адаптер 2: Приєднано до -> Хост-адаптер, Додатково -> Перевірте кабель, підключений та в режимі проміжок -> Дозволити всім.
  2. Запустіть ubuntu vm.

  3. Увійдіть до VM як корінь.
  4. Відредагуйте файл '/ etc / network / interface', як показано нижче, і збережіть його:

    auto lo
    iface lo inet loopback
    
    auto eth0
    iface eth0 inet dhcp
    
    auto eth1
    iface eth1 inet dhcp
    
  5. Перезавантажте програму VM.

  6. Увійдіть до VM та запустіть команду нижче, щоб перевірити IP, призначений eth1:

    ifconfig
    
  7. Використовуйте цей IP, щоб відкрити сеанс шпаклівки для VM.



2

Ubuntu 18.04 LTS

Конфігурація з мостом, щоб побачити ip сервера, і підключитися без "переадресації порту"

VirtualBox> клацніть правою кнопкою миші на сервері> налаштування> Мережа> увімкніть адаптер 2> виберіть «мостовий»> безрезультатний режим: дозволити всім> Перевірити підключений кабель> запустити сервер

На сервері ubuntu відредагуйте sudo nano /etc/netplan/*init.yamlфайл,

Мій зразок файлу:

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

Команди, які допоможуть вам

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

Налаштування статичних IP-адрес на сервері Ubuntu 18.04 LTS - за допомогою NetPlan


0

Просто встановлення мережевих налаштувань на мостику зробило для мене трюк.

Ваш IP зміниться, коли ви це зробите. Однак у моєму випадку це змінилося не відразу. ifconfigповернув той самий ip. Я перезавантажив vm і boom, ip налаштувався на один початок з 192. *, і мені одразу було дозволено ssh-доступ.


Ця інформація, яку я здогадуюсь, є частково або навіть цілком неточною в якомусь загальному сенсі, я поняття не маю. downvoter не намагався сказати.
boulder_ruby

На кмітливість, "для деяких це не працює".
boulder_ruby

0

У захищених мережах налаштування вашої мережі на міст може працювати. Адміністратори могли дозволити лише одну мак-адресу на порт або ще гірше заблокувати порт, якщо комутатори виявлять кілька маків на одному порту.

Найкраще рішення, на мою думку, - це створити додатковий мережевий інтерфейс для обробки додаткових послуг, які ви хотіли б запустити на своїх машинах. Таким чином, у мене є інтерфейс для мостів, який дозволяє з’єднати мої ноутбуки додому та можу SSH в нього з інших пристроїв у моїй мережі, а також адаптер тільки для хоста, коли я хотів би SSH у свій VM з мого ноутбука, коли я підключений до мережі Wi-Fi у кампусі.


0

Використовуйте мережевий адаптер NAT і додайте порт вперед. Згадайте фактичний хост ip.Не використовуйте 127.0.0.1 або localhost.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.