首页 文章

从远程服务器转发ssh的vagrant

提问于
浏览
21

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

目前,我可以ssh不使用 ssh vagrant@127.0.0.1 -p 2222 从主机操作系统中使用vagrant ssh . 但是,如果我运行相同的命令(用主机的IP地址替换127.0.0.1),我得到"ssh connect to host XXXXX port 2222: Connection refused."

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

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

但是,这不允许来自主机或网络中任何其他机器的ssh连接 . 另外,我在流浪文档中花了一段时间用config.ssh . 我认为大多数这些参数虽然指定了vagrant vm运行ssh的端口 .

我真的不认为这应该是那么困难 . 有谁知道我可能做错了什么,或者我应该做些什么来从远程服务器ssh到vagrant vm?

4 回答

  • 1

    如果您不想将网络更改为公共,则可以通过以下方式覆盖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访问,因此您可以在本地计算机外部访问它 .

  • 6

    自v1.2.3 Vagrant端口转发 by default binds with 127.0.0.1 so only local connections are allowed .

    你得到"Connection refused"因为端口转发没有绑定到你的网络接口(例如eth0,wlan0) . 主机上的端口 2222 甚至不对同一网络中的主机开放(其他主机无法访问环回接口) .

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

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

    它应该通过其中一个公共网络接口桥接,您应该能够在VM启动后获取IP地址,然后运行 ifconfig -aip 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)'
    

    查看更多内容=> Public Network

  • 31

    您还可以将另一个规则添加到 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'端口(在我的情况下为22)从主机外部连接到Vagrant .

    您无法删除默认端口,因为Vagrant在启动时会挂起 .

  • 18

    使用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 account

    • 知道盒子名称,

    • 知道密钥的密码,和

    • 安装了Vagrant(!)

    可以通过 vagrant connect --ssh BOXNAME 执行远程SSH到框 .
    Vagrant负责幕后的所有管理员工作(这里是some details) .

    像宣传的那样工作 .
    我想如果Vagrant主机(不仅仅是VM)在NAT后面,这甚至可以工作 .

    限制:

    • vagrant share 个会话到期(currently after 8 hours

    • 期望一些延迟,因为所有流量(推测)都是通过Altas服务器路由的

    • 我已经看到我的远程连接关闭(没有明显的原因)我可能在15分钟后没用过它们 .

相关问题