Парное программирование с Tmux и Vagrant

2797
neezer

У кого-нибудь есть четкое пошаговое руководство по настройке общего сеанса tmux на Vagrant vbox, в которое мои коллеги (по локальной сети нашего офиса) могли бы работать по SSH? Статьи, которые я нашел в Интернете, похоже, только посвящены настройке этого с компьютера на компьютер (без настройки виртуальной коробки), и я не очень хорош в работе с сетью, поэтому я не смог экстраполировать решение ...

Мы все работаем на последних моделях Mac в нашем офисе, кстати.

Вот одна статья, которую я нашел, но не смог поработать с Vagrant: http://blog.voxdolo.me/remote-pairing-with-vim-and-tmux.html

РЕДАКТИРОВАТЬ: Чтобы уточнить, я действительно не знаю, как я должен настроить Vagrant, чтобы позволить мне SSH в него с компьютера за пределами того, на котором размещена виртуальная машина. В приведенной выше статье предлагается добавить tunnelsхост на моей физической машине, на которой запущена виртуальная машина (в дальнейшем именуемая MBP), поэтому я и сделал это. Следующее - это ProxyCommandобъявление хоста, которое, как я предположил, должно жить в MBP.

Итак, затем я пробую SSHing в MBP с гостевой машины (другой отдельной физической машины в моей сети), и это, похоже, работает ... но это только приводит меня к MBP, а не к образу Vagrant, работающему на MBP.

Я обычно регистрирую образ Vagrant на MBP через vagrant ssh(согласно документации), и я знаю, как перенаправлять порты на Vagrant VM на MBP, но мне неясно, как я мог перенаправить порты / SSH с MBP на Vagrant VM, что, я полагаю, мне понадобится, чтобы моя гостевая машина могла подключаться через SSH через MBP к моему Vagrant-образу.

В двух словах, это то, что я пытаюсь достичь. Я делаю свою работу по разработке в Vagrant VM, которая сохраняет мой MBP красивым и чистым от любого связанного с dev, а также держит мои среды разработки полностью изолированными друг от друга, но я бы хотел начать парное программирование со своими коллегами через tmux, таким образом, причина, почему я задал этот вопрос.

Я хотел бы выполнить все это, не устанавливая дополнительную учетную запись пользователя на MBP или предоставляя моим коллегам доступ к моей локальной учетной записи пользователя на MBP, чтобы получить доступ к моей Vagrant VM, если это вообще возможно.


ОБНОВЛЕНИЕ : пытался установить мостовое соединение, согласно предложению @Джона Уитли, и я до сих пор безуспешно.

У меня на сетевом образе нового сетевого адаптера установлен мост, связанный с моим интерфейсом AirPort на моем хост-компьютере:

vbox manager

Затем я могу vagrant sshв поле и запустить ifconfigи увидеть, что это как IP 10.0.2.151:

ifconfig on vagrant box

Но когда я открываю новый сеанс терминала на моей хост-машине и пытаюсь пропинговать этот адрес, я ничего не получаю:

ping

Я заметил, что Vagrant docs, в разделе для мостовых сетей ( http://vagrantup.com/v1/docs/bridged_networking.html ), кажется, перечисляет мостовое устройство как eth2и имеет elipses до этого, предполагая, что может быть также быть eth1активным устройством с другим IP. У меня ifconfigна бродячей коробке нет двух отдельных адаптеров. Мне предлагается при загрузке бродячего образа:

prompt for bridged network interface

На что я всегда отвечаю 1за свой Аэропорт, что, я полагаю, мне следует делать. Есть мысли о том, как это работает? Мой Vagrant box все еще может общаться с Интернетом, и переадресация портов все еще работает ...

2
Подробнее, пожалуйста. Мы не знаем, * как * это не работает для вас и даже на каком этапе вы заблокированы. Что работает? Что нет? Можете ли вы подключить SSH к одной из этих виртуальных машин? Вы говорили с отделом ИТ? romainl 11 лет назад 1
Что ж, сеансы tmux являются общими по умолчанию, поэтому эта часть не должна создавать проблем. Просто подключитесь к нему обычно из нескольких мест. Daniel Andersson 11 лет назад 0
@romainl Смотрите мое обновление; сделал все возможное, чтобы объяснить, что я пытался до сих пор. Опять же, SSH за рамками не моя сильная сторона ... neezer 11 лет назад 0

3 ответа на вопрос

4
John Whitley

Самое простое, что можно сделать, это добавить сетевой интерфейс Bridged к вашей виртуальной машине Vagrant. (Не изменяйте основной сетевой интерфейс на интерфейс Bridged, согласно документам Vagrant .) Интерфейс NAT имеет доступ к внешней сети (например, чтобы виртуальная машина могла получать пакеты, репозитории git и т. Д.), Но внешняя сеть может ' т доступ к виртуальной машине. NAT-only - это настройка сети Vagrant по умолчанию. В графическом интерфейсе VirtualBox Manager это будет выглядеть так:

Интерфейс NAT в графическом интерфейсе VirtualBox

Интерфейс VirtualBox Bridged отображается во внешней сети точно так же, как реальный физический хост, включая получение IP-адреса от локального DHCP-сервера и получение имени домена, назначенного через DDNS, если для локальной сети он настроен для этого. Это означает, что вы можете просто проверить IP-адрес виртуальной машины (например, через vagrant ssh -c ifconfig) и напрямую подключиться к ней по ssh. Опять же, скриншот колпачка VB:

Мостовой интерфейс в VirtualBox GUI

В VirtualBox Networking Docs охватывает различные «ароматы» интерфейсы, поддерживаемые средой VM, в том числе некоторые из них не рассматривается. Это довольно короткий и хорошо стоит прочитать.

Последнее волшебство - правильная настройка виртуальной машины VirtualBox. В вашем Vagrantfile вам нужно добавить такую ​​строку:

config.vm.network :bridged 

vagrant reloadнеобходимо, чтобы это изменение вступило в силу. См. Документацию по сетевым мостам Vagrant для более подробной информации об этом методе.

Я настроил свой базовый блок для использования NAT вместо Bridged из-за этого фрагмента из документов Vagrant (http://vagrantup.com/v1/docs/base_boxes.html): «Теперь это действительно важно: убедитесь, что сетевой контроллер настроен на NAT. Для правильной работы переадресации портов необходимо использовать NAT. Соединения с мостовым соединением не поддерживаются, поскольку от компьютера требуется указать, к какому устройству он подключен, а какой неизвестен. " Я просто теряю переадресацию портов на моей виртуальной машине на локальный хост, если я делаю это (и вместо этого мне нужно разрешить IP-адрес виртуальной машины в моем браузере)? neezer 11 лет назад 0
Это замечание о NAT с Vagrant является правильным, спасибо. Я исправил и уточнил текст выше, чтобы указать, что мостовой интерфейс должен быть _добавлен_ к виртуальной машине, а не заменять NAT. Установка sshd по умолчанию будет связывать порт 22 на всех интерфейсах, так что вы все равно можете подключиться к ssh и запустить tmux через добавленный интерфейс Bridged. John Whitley 11 лет назад 0
Эй, @john, смотри мое обновление выше; Я не смог получить эту работу, которая была разочаровывающей, так как я чувствую, что она должна быть довольно простой и понятной. Буду признателен за любую дополнительную информацию, которую вы можете дать мне! neezer 11 лет назад 0
So I determined that this does work fine with the official vagrant boxes found here: https://github.com/mitchellh/vagrant/wiki/Available-Vagrant-Boxes. All you need to do is `config.vm.network :bridged` as you pointed out. Will have to figure out why my other custom box wasn't working... thanks. neezer 11 лет назад 0
@neezer, as a wild guess, you might look at the sshd config on the non-working box. It might be that it's binding port 22 on only one interface? I'd log into the VM via `vagrant ssh` and poke around to see what's bound to port 22(sshd) via `sudo netstat -a -p` on the box. John Whitley 11 лет назад 0
3
Lenilson Jose Dias

Через NAT вы можете подключиться с этим:

ssh -p 2222 vagrant@[IP address of your host machine] 

Если ваш хост-компьютер находится под прокси, перенаправьте порт 2222 в Интернет.

0
David Watson

Любой, у кого есть эта проблема, может захотеть рассмотреть wemux: https://github.com/zolrath/wemux

Из README:

Если у вас установлен Homebrew, вы можете установить wemux довольно просто:

brew install https://github.com/downloads/zolrath/wemux/wemux.rb 

Пользователь, который установил wemux, будет автоматически добавлен в список хостов wemux. Чтобы изменить хост или добавить больше хостов, отредактируйте /usr/local/etc/wemux.conf и добавьте имя пользователя в массив host_list.

Пользователи в host_list смогут запускать новые серверы wemux, все остальные пользователи будут клиентами wemux и присоединятся к этим серверам.

$ vim /usr/local/etc/wemux.conf 

ИЛИ ЖЕ

$ wemux conf  host_list=(zolrath brocksamson) 

Похожие вопросы