我设置vagrant在主机操作系统上运行vm.我想做的是能够从其他机器直接进入流浪者vm(即,我不应该进入宿主,然后流浪汉ssh等进入流浪者vm).
目前,我可以ssh不使用来自主机操作系统的vagrant ssh ssh vagrant@127.0.0.1 -p 2222.但是,如果我运行相同的命令(用主机的IP地址替换127.0.0.1),我得到"ssh连接到主机XXXXX端口2222:连接被拒绝."
我尝试将自己的端口转发规则添加到vagrant:
config.vm.network :forwarded_port, guest: 22, host: 2222
Run Code Online (Sandbox Code Playgroud)
但是,这不允许来自主机或网络中任何其他机器的ssh连接.另外,我在vagrant docs中花了一些时间使用config.ssh.我认为大多数这些参数虽然指定了vagrant vm运行ssh的端口.
我真的不认为这应该是那么困难.有谁知道我可能做错了什么,或者我应该做些什么来从远程服务器ssh到vagrant vm?
Tlm*_*aK0 33
如果您不想将网络更改为公共,则可以通过以下方式覆盖ssh的默认端口转发:
config.vm.network :forwarded_port, guest: 22, host: 2222, host_ip: "0.0.0.0", id: "ssh", auto_correct: true
Run Code Online (Sandbox Code Playgroud)
这会将guest 22端口转发到主机上的2222,并且可以通过任何ip访问,因此您可以在本地计算机外部访问它.
Ter*_*ang 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
Run Code Online (Sandbox Code Playgroud)
或更高级,您可以为公共网络设置默认网络接口
<!-- language: lang-rb -->
config.vm.network "public_network", :bridge => 'en1: Wi-Fi (AirPort)'
Run Code Online (Sandbox Code Playgroud)
查看更多=> 公共网络
您还可以添加其他规则以Vagrantfile满足以下要求:
config.vm.network :forwarded_port, guest: 1234, host: 22
Run Code Online (Sandbox Code Playgroud)
使用默认端口(2222)连接到Vagrant并进行编辑/etc/ssh/sshd_config,然后Port 22在先前配置为"guest"的端口下方添加,从而产生:
...
Port 22 #Uncomment this line if it's commented
Port 1234
....
Run Code Online (Sandbox Code Playgroud)
最后,重新启动ssh守护程序或执行vagrant reload(如果Vagrantfile在VM运行时进行了编辑,则必须重新加载它),现在您可以使用主机外部的"主机"端口(在我的情况下为22)连接到Vagrant.
您无法删除默认端口,因为Vagrant在启动时会挂起.