Подтвердить что ты не робот

Vagrant forwarding ssh с удаленного сервера

Я настроил бродягу, чтобы запустить vm на хосте os. То, что я хотел бы сделать, - это иметь возможность ssh с других машин непосредственно в бродячую vm (т.е. Я не должен ssh в хост, а затем бродячий ssh ​​и т.д. В бродягу vm).

В настоящее время я не могу использовать ssh, не используя брандмауэр ssh из хоста os, используя ssh [email protected] -p 2222. Однако, если я запустил ту же команду (заменив 127.0.0.1 на IP-адрес хоста), я получаю "ssh подключиться к хосту XXXXX-порта 2222: Connection отказано".

Я попробовал добавить собственное правило перенаправления портов для бродяг:

config.vm.network :forwarded_port, guest: 22, host: 2222

Но это не позволяет подключать ssh с хост-машины или любого другого компьютера в сети. Кроме того, я провел некоторое время с config.ssh в бродячих документах. Я думаю, что большинство этих параметров, однако, указывают, какой порт брандмауэр vm запускает ssh.

Я действительно не думаю, что это должно быть так сложно. Кто-нибудь знает, что я могу делать неправильно, или что я должен делать по-другому с ssh в бродячий vm с удаленного сервера?

4b9b3361

Ответ 1

Если вы не хотите менять сеть на общедоступную, вы можете переопределить перенаправление портов по умолчанию для ssh следующим образом:

config.vm.network :forwarded_port, guest: 22, host: 2222, host_ip: "0.0.0.0", id: "ssh", auto_correct: true

Это приведет к отправке гостевого 22 порта в 2222 на ваш хост-компьютер и будет доступно с любого ip, поэтому вы можете получить доступ к нему за пределами локальной машины.

Ответ 2

Так как v1.2.3 Переадресация портального порта по умолчанию связывается с 127.0.0.1, поэтому разрешены только локальные подключения.

У вас есть "Соединение отказано", потому что переадресация порта НЕ была привязана к вашим сетевым интерфейсам (например, eth0, wlan0). Порт 2222 на вашем хосте НЕ открыт даже для хостов в одной сети (интерфейсы loopback недоступны для других хостов).

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

Добавьте следующее к вашему Vagrantfile и выполните vagrant reload.

Он должен пройти через один из общих сетевых интерфейсов, вы сможете получить IP-адрес после того, как VM встанет, vagrant ssh в него и запустите ifconfig -a или ip addr, чтобы получить IP-адрес в ssh от удаленных хостов.

Пример Vagrantfile

<!-- language: lang-rb -->

config.vm.network :public_network # 2nd interface bridged mode

или более продвинутый, вы можете установить сетевой интерфейс по умолчанию для общедоступной сети.

<!-- language: lang-rb -->

config.vm.network "public_network", :bridge => 'en1: Wi-Fi (AirPort)'

Подробнее = > общедоступная сеть

Ответ 3

Вы также можете добавить другое правило к Vagrantfile следующим образом:

config.vm.network :forwarded_port, guest: 1234, host: 22

Подключитесь к Vagrant с портом по умолчанию (2222) и отредактируйте /etc/ssh/sshd_config, затем добавьте ниже Port 22 порт, ранее настроенный как "гость", в результате:

...
Port 22 #Uncomment this line if it commented
Port 1234
....

Наконец, перезапустите демон ssh или выполните vagrant reload (если вы отредактировали Vagrantfile во время работы виртуальной машины, вам нужно перезагрузить его), и теперь вы можете подключиться к Vagrant, используя порт "host" (22 в моем случае) извне хост-компьютера.

Вы не можете удалить порт по умолчанию, потому что Vagrant будет висеть при запуске.

Ответ 4

Используйте vagrant share --ssh

В настоящее время у бродяги есть служба для регистрации Vagrant VM для удаленного доступа SSH.

Смотрите здесь: https://www.vagrantup.com/docs/share/ssh.html

Вы вызываете vagrant share --ssh.
Это генерирует ключ SSH (зашифрованный и защищенный паролем), загружает его на сервер Hashicorp, и возвращает глупое глобальное имя поля (например, "rambunctious-deer-3496" ).
Тогда все, кто

  • имеет учетную запись Hashicorp Atlas
  • знает имя поля,
  • знает пароль для ключа и
  • установлен брандмауэр (!)

может выполнять удаленный SSH в поле через vagrant connect --ssh BOXNAME.
Бродяга позаботится обо всех админ файлах за кулисами (здесь некоторые детали).

Работает как рекламируется. Я думаю, это будет даже работать, если хост-бродяга (а не только виртуальная машина) находится за NAT.

Ограничения:

  • vagrant share session expire (в настоящее время через 8 часов)
  • ожидайте некоторую задержку, поскольку весь трафик (предположительно) маршрутизируемый через сервер Altas
  • Я видел, как мои удаленные соединения закрываются (без видимых причин) после того, как я не использовал их в течение 15 минут.