24

我设置 vagrant 在主机操作系统上运行 vm。我想要做的是能够从其他机器直接 ssh 进入 vagrant vm(即,我不应该 ssh 进入主机,然后 vagrant ssh 等进入 vagrant vm)。

目前,我可以不使用主机操作系统中的 vagrant ssh 使用ssh vagrant@127.0.0.1 -p 2222. 但是,如果我运行相同的命令(将 127.0.0.1 替换为主机的 IP 地址),我会得到“ssh 连接到主机 XXXXX 端口 2222:连接被拒绝”。

我尝试将自己的端口转发规则添加到 vagrant:

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

但这不允许来自主机或网络中任何其他机器的 ssh 连接。此外,我在 vagrant 文档中使用了config.ssh一段时间。我认为这些参数中的大多数都指定了 vagrant vm 在哪个端口上运行 ssh。

我真的不认为这应该那么困难。有谁知道我可能做错了什么,或者我应该做些什么不同的事情来从远程服务器 ssh 进入一个流浪虚拟机?

4

4 回答 4

38

如果您不想将网络更改为公共网络,您可以通过以下方式覆盖 ssh 的默认端口转发:

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

这会将访客 22 端口转发到主机上的 2222,并且可以从任何 ip 访问,因此您可以在本地计算机之外访问它。

于 2014-12-15T11:13:52.250 回答
18

由于 v1.2.3 Vagrant 端口转发默认与 127.0.0.1 绑定,因此只允许本地连接

您收到“连接被拒绝”,因为端口转发未绑定到您的网络接口(例如 eth0、wlan0)。您主机上的端口2222甚至不对同一网络中的主机开放(其他主机无法访问环回接口)。

如果您想从远程主机(在同一个 LAN 中)直接通过 SSH 连接到 Vagrant VM,最好和最简单的方法是使用公共网络(VirtualBox 的桥接网络模式)。

将以下内容添加到您的Vagrantfile并执行vagrant reload.

它应该通过公共网络接口之一进行桥接,您应该能够在 VM 启动、vagrant ssh进入并运行后获取 IP 地址,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)'

查看更多 =>公共网络

于 2013-10-07T09:57:07.530 回答
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(如果您Vagrantfile在 VM 运行时进行了编辑,则必须重新加载它),现在您可以使用主机外部的“主机”端口(在我的情况下为 22)连接到 Vagrant。

您不能删除默认端口,因为 Vagrant 会在启动时挂起。

于 2014-03-05T19:26:36.963 回答
2

利用vagrant share --ssh

Vagrant 现在有一项服务,用于自动注册 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
Vagrant 负责幕后的所有管理工作(这里有一些细节)。

像宣传的那样工作。
如果 Vagrant 主机(不仅仅是 VM)在 NAT 后面,这甚至会起作用。

限制:

  • vagrant share会话到期(目前在 8 小时后
  • 预计会有一些延迟,因为所有流量(可能)都通过 Altas 服务器路由
  • 在我大约 15 分钟未使用远程连接后,我看到远程连接关闭(没有明显原因)。
于 2016-09-12T18:34:56.093 回答