我设置vagrant在主机操作系统上运行vm。我想做的是能够从其他机器直接进入流浪者vm(即,我不应该进入宿主,然后流浪汉ssh等进入流浪者vm)。
目前,我可以使用ssh vagrant@127.0.0.1 -p 2222
来避免使用来自主机操作系统的vagrant ssh。但是,如果我运行相同的命令(用主机的IP地址替换127.0.0.1),我得到" ssh连接到主机XXXXX端口2222:连接被拒绝。"
我尝试将自己的端口转发规则添加到vagrant:
config.vm.network :forwarded_port, guest: 22, host: 2222
但是,它不允许来自主机或网络中任何其他计算机的ssh连接。另外,我在流浪文档中花费了一段时间config.ssh。我认为大多数这些参数虽然指定了vagrant vm运行ssh的端口。
我真的不认为这应该是那么困难。有谁知道我可能做错了什么,或者我应该做些什么来从远程服务器ssh到vagrant vm?
答案 0 :(得分:32)
如果您不想将网络更改为公共,您可以通过以下方式覆盖ssh的默认端口转发:
config.vm.network :forwarded_port, guest: 22, host: 2222, host_ip: "0.0.0.0", id: "ssh", auto_correct: true
这会将guest 22端口转发到主机上的2222,并且可以通过任何ip访问,因此您可以在本地计算机外访问它。
答案 1 :(得分:18)
自v1.2.3以来,Vagrant端口转发默认绑定为127.0.0.1,因此只允许本地连接。
您的“连接已拒绝”,因为端口转发未绑定到您的网络接口(例如eth0,wlan0)。主机上的端口2222
甚至不对同一网络中的主机开放(其他主机无法访问环回接口)。
如果要从远程主机(在同一LAN中)直接SSH到Vagrant VM,最好和最简单的方法是使用公共网络(VirtualBox的桥接网络模式)。
将以下内容添加到Vagrantfile
并执行vagrant reload
。
它应该通过其中一个公共网络接口桥接,您应该能够在VM启动后获取IP地址vagrant ssh
并运行ifconfig -a
或ip addr
以获取从远程主机ssh到的IP地址。
示例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)'
查看更多=&gt; Public Network
答案 2 :(得分:6)
您还可以向Vagrantfile
添加另一条规则,如下所示:
config.vm.network :forwarded_port, guest: 1234, host: 22
使用默认端口(2222)连接到Vagrant并编辑/etc/ssh/sshd_config
,然后在Port 22
下面添加先前配置为“guest”的端口,结果:
...
Port 22 #Uncomment this line if it's commented
Port 1234
....
最后,重新启动ssh守护程序或执行vagrant reload
(如果您在VM运行时编辑了Vagrantfile
,则必须重新加载它),现在您可以使用“host”端口连接到Vagrant(22在我的情况下)来自主机外部。
您无法删除默认端口,因为Vagrant在启动时会挂起。
答案 3 :(得分:1)
vagrant share --ssh
Vagrant现在有一项注册Vagrant VM的服务 用于远程SSH访问。
见这里:https://www.vagrantup.com/docs/share/ssh.html
您致电vagrant share --ssh
这会生成一个SSH密钥(加密和密码保护),
将其上传到Hashicorp服务器,
并返回一个愚蠢的全局框名称(例如&#34; rambunctious-deer-3496&#34;)。
可以通过远程SSH执行到框
vagrant connect --ssh BOXNAME
。
Vagrant负责幕后的所有管理员工作(这里是some details)。
按宣传的方式工作。
我猜测如果Vagrant主机(不仅仅是VM)位于NAT后面,它甚至可以工作。
限制:
vagrant share
个会话到期(currently after 8 hours)