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 с удаленного сервера?
Ответы
Ответ 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 минут.