Как SSH к гостю VirtualBox внешне через хост? [закрыто]


644

У меня установлена ​​Ubuntu VM на моей машине с Windows 7. Как мне настроить его так, чтобы я мог обращаться к веб-серверу извне через SSH?

Я обнаружил шаги ( настройка доступа по SSH между хостом VirtualBox и гостевыми виртуальными машинами ), чтобы иметь возможность подключиться к ssh моему гостю с моего хоста, но это все еще оставляет мне проблему с доступом к нему через мой маршрутизатор.

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


3
Есть гораздо более простой способ сделать это, используя Vagrant (который создает готовые к работе виртуальные машины (ssh-accessable, ip-accessable) из файла конфигурации или графического интерфейса). Я не знаю ваш вариант использования, но я написал большое руководство по созданию виртуальной машины Ubuntu сервера с Ushntu , доступной по ssh, с помощью Vagrant , полезное, когда вы хотите настроить машину для разработки на основе LAMP.
Слайк

1
Vagrant - отличный инструмент, но он не совместим с более
свежими

2
Лучший ответ - внизу: stackoverflow.com/a/10410527/2214806
Майкл

Вы можете проверить это руководство wiki.workassis.com/virtualbox-ssh-between-host-and-guest
Bikesh M

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

Ответы:


1308

Лучший способ войти на гостевую виртуальную машину Linux VirtualBox - это переадресация портов . По умолчанию у вас уже должен быть один интерфейс, использующий NAT . Затем перейдите в настройки сети и нажмите кнопку переадресации портов . Добавить новое правило . В качестве имени правила введите «ssh». В качестве «Host port» вставьте 3022. В качестве «Guest port» вставьте 22. Все остальное из правила можно оставить пустым.

или из командной строки

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

где «myserver» - это имя созданной виртуальной машины. Проверьте добавленные правила:

VBoxManage showvminfo myserver | grep 'Rule'

Это все! Пожалуйста, убедитесь, что вы не забыли установить SSH- сервер в виртуальной машине:

sudo apt-get install openssh-server

Чтобы войти в гостевую виртуальную машину SSH, напишите:

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

129

Измените тип адаптера в VirtualBox на bridged и настройте гостя на использование DHCP или установите статический IP-адрес за пределами DHCP. Это приведет к тому, что виртуальная машина будет действовать как обычный гость в вашей домашней сети. Затем вы можете перенести порт вперед.


2
Любая идея, как 2 конфигурации адаптера будет работать? Один на NAT, а другой только на Host?
CantGetANick

16
По моему мнению, показ виртуальной машины в локальной сети - не лучший вариант (например, в офисной сети), решение, предлагаемое @vkostromin, сохраняет инкапсуляцию виртуальной машины в пределах хоста.
Виктор П.

1
@VictorP. Не могли бы вы объяснить, почему это не лучший вариант в офисной сети? Это связано с безопасностью или?
mdo123

1
Даже зная, что это не лучший вариант, в моей текущей конфигурации адаптер для моста является единственным решением, которое работает.
Джеймс

69

Сохранение адаптера NAT и добавление второго адаптера только для хоста работает потрясающе и крайне важно для ноутбуков (где внешняя сеть всегда меняется).

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

Не забудьте создать сеть только для хоста в самой virtualbox (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/… is еще одно хорошее объяснение.
Бен

1
еще один хороший источник по настройке 2buntu.com/articles/1513/…
mdo123

1
@Sparkler работает с sshd? Брандмауэр закрывает порты?
августа

24

Вы также можете использовать мостовую сеть (или «Мостовой адаптер», в более новых версиях) в настройках сети . Это поместит вашу виртуальную машину в VLAN с вашей машиной. Таким образом, вы можете просто ssh в виртуальную машину, как это.

ssh user @ IP_OF_VM


С этим решением соединение SSH идет через LAN?
user2233706

23

Как сделать хост-сеть ( лучше, чем мостовую) для Solaris 10 и Ubuntu 16.04

Добавить интерфейс только для хоста

  1. Virtualbox> Файл> Настройки> Сеть> Сети только для хоста> Добавить
  2. Отключение вм.
  3. Настройки ВМ> Сеть. Первый адаптер должен быть Nat, второй Host-only.
  4. Запустите cmd.exe и запустите ipconfig /all. Вы должны увидеть строки:

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

    Второй адаптер в гостевой также должен быть в 192.168.59. *.

  5. Запустите ВМ.

Солярис 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. Мы будем использовать третий.

Отредактируйте / etc / network / interfaces

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гостя.
Вопросы о

16

Чтобы подключиться к виртуальной машине Ubuntu, работающей в VirtualBox с вашего хоста, по ssh, вам нужно настроить два сетевых адаптера для виртуальной машины.

Прежде всего, остановите ВМ, если еще нет.

Затем выберите виртуальную машину и откройте меню «Настройки» на панели инструментов VirtualBox:

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

Настройте адаптер 1

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

Настройте адаптер 2

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

(Примечание: вам не нужно настраивать переадресацию портов.)

Вот и все. После настройки вы можете запустить свою виртуальную машину. В вашей виртуальной машине конфигурация сети будет выглядеть ниже, и у вас также будет доступ к Интернету:

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

Также на вашем хост-компьютере вы можете использовать ssh для вашей виртуальной машины:

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

Убедитесь, что сервер SSH установлен и запущен на виртуальной машине.

$ 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 Гостевая Машина Из ИНТЕРНЕТА

Ответы, предоставленные другими пользователями здесь: 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.Port forward = мы передаем соединение от маршрутизатора к хост-машине

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

  • Экран Pfwd Pfwd маршрутизатора требует ввода: AppName: SSH_Fwd, Port_from: 3022, Protocol: обоих (UDP / TCP), IP_address: hostIP_address, Port_to: 3022, все остальное может быть пустым

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

3. Брандмауэр компьютера: открытый порт 3022 # поэтому переадресованный порт может проходить через гостевую машину

  • Хост-машина: установите VirtualBox, гостевые дополнения и гостевой компьютер, если это еще не сделано

  • Настройте гостевой компьютер, а затем следуйте разделу «Сеть» ниже.

  • Я использовал VirtualBox GUI для настройки гостевой сети - проще, чем CLI

  • Если вы хотите использовать другие методы, обратитесь к: VirtualBox/manual/ch06.html#natforward

4. Некоторые предлагают использовать сетевой мост для гостевого = доступа к локальной сети и другим компьютерам в вашей локальной сети. Это также создает повышенную угрозу безопасности, потому что теперь ваша гостевая машина теперь подвергается воздействию компьютеров локальной сети и, возможно, хакеров ИНТЕРНЕТ, если брандмауэр не настроен должным образом. Поэтому я выбрал Сетевой адаптер, подключенный к NAT, для уменьшения подверженности мостовым рискам безопасности.

На гостевой машине сделайте следующее:

  • Настройки сети VirtualBox на гостевой машине: Адаптер 1: Подключен к NAT
  • Правило переадресации портов гостевого компьютера VirtualBox: имя: External_SSH, протокол: TCP, порт хоста: 3022, гостевой порт 22, IP-адреса хоста и гостя: оставьте пустым
  • нажмите на продвижение в разделе сети, затем нажмите на переадресацию портов, чтобы ввести правила
  • Брандмауэр гостевой машины: открыть порт 22 # можно подключиться через ssh
  • Гостевая машина: убедитесь, что сервер ssh установлен, правильно настроен и работает
  • LINUX тест, чтобы увидеть, работает ли ssh сервер с командой: sudo service ssh status
  • Можно проверить 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. Выберите только что созданный адаптер хоста virtualbox и физическую сетевую карту
    2. Щелкните правой кнопкой мыши и выберите «Сделать мост»
  3. наслаждаться

4

Вы также можете инициировать переадресацию порта на своего ХОСТА ИЛИ ЛЮБОГО ДРУГОГО СЕРВЕРА от вашего Гостя. Это особенно полезно, если ваш Гость «заблокирован» или не может завершить опцию ModifyVM (например, нет разрешения на VBoxManage).

Три незначительных требования: 1) вы / можете войти в VirtualBox Guest (через графический интерфейс консоли, другого гостя и т. Д.), 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 или любой другой IP-адрес сервера, на который вы хотите перенаправить порт.
  3. На ssh 10.0.2.2 -p2222хосте запустите, где 10.0.2.2 - виртуальный IP-адрес шлюза / VBHost по умолчанию, найденный на шаге 1. Если это НЕ хост VirtualBox, на который вы перенаправляете порт, то командаssh localhost -p2222

4

Выполните следующие шаги для входа в виртуальную машину Ubuntu, работающую в виртуальном ящике, с хост-машины, используя putty (без переадресации портов):

  1. В диспетчере Virtualbox выберите виртуальную машину, нажмите значок настроек. Затем перейдите в Сеть и включите два адаптера, как показано ниже:

    • Адаптер 1 (для доступа в Интернет): подключен к -> NAT, расширенный -> проверьте подключенный кабель.
    • Адаптер 2: подключен к адаптеру «Только хост», «Дополнительно» -> «Проверить подключенный кабель» и «Случайный режим» -> «Разрешить все».
  2. Запустите Ubuntu VM.

  3. Войдите в виртуальную машину как root.
  4. Отредактируйте файл '/ etc / network / interfaces', как показано ниже, и сохраните его:

    auto lo
    iface lo inet loopback
    
    auto eth0
    iface eth0 inet dhcp
    
    auto eth1
    iface eth1 inet dhcp
    
  5. Перезагрузите ВМ.

  6. Войдите в виртуальную машину и выполните команду ниже, чтобы проверить IP, выделенный для eth1:

    ifconfig
    
  7. Используйте этот IP для открытия сессии замазки для ВМ.



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


1

Простая установка Сетевых настроек для мостов сделала свое дело для меня.

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


Я предполагаю, что эта информация частично или даже полностью неточна в некотором общем смысле, я понятия не имею. Downvoter не удосужился сказать.
boulder_ruby

То есть, «для некоторых это не работает».
boulder_ruby

0

В защищенных сетях настройка вашей сети на мост может не работать. Администраторы могут разрешить только один mac-адрес на порт или, что еще хуже, заблокировать порт, если коммутаторы обнаружат несколько маков на одном порту.

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


0

Используйте сетевой адаптер NAT и добавьте порт вперед. Упомяните фактический хост ip. Не используйте 127.0.0.1 или localhost.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.