Laravel Homestead SSH远程共享问题



我是第一次测试Vagrant中的共享选项,我正在使用Windows 7 Ultimate SP1 32-bit主机机器上的新的Laravel Homestead VM Provisioned VirtualBox Provister进行。

我正在使用MINGW32作为Shell,并且由于确保这不会影响我的动作而禁用Windows防火墙(域,本地和公共)。Vagrant无法自动找到HTTP端口,因此我要指定它。
如果我运行以下命令,一切都很好:

MINGW32 ~/Vagrant/Homestead ((v6.2.2))
$ vagrant share --http 8000
Vagrant Share now defaults to using the `ngrok` driver.
The `classic` driver has been deprecated.
For more information about the `ngrok` driver, please
refer to the documentation:
  https://www.vagrantup.com/docs/share/
==> homestead-7: Detecting network information for machine...
    homestead-7: Local machine address: 127.0.0.1
    homestead-7:
    homestead-7: Note: With the local address (127.0.0.1), Vagrant Share can only
    homestead-7: share any ports you have forwarded. Assign an IP or address to your
    homestead-7: machine to expose all TCP ports. Consult the documentation
    homestead-7: for your provider ('virtualbox') for more information.
    homestead-7:
    homestead-7: Local HTTP port: 8000
    homestead-7: Local HTTPS port: disabled
    homestead-7: Port: 2222
    homestead-7: Port: 27017
    homestead-7: Port: 33060
    homestead-7: Port: 44300
    homestead-7: Port: 54320
    homestead-7: Port: 8000
    homestead-7: Port: 8025
==> homestead-7: Creating Vagrant Share session...
==> homestead-7: HTTP URL: http://3bbh648b.ngrok.io
==> homestead-7:

但是以下命令失败:

MINGW32 ~/Vagrant/Homestead ((v6.2.2))
$ vagrant share --http 8000 --ssh
Vagrant Share now defaults to using the `ngrok` driver.
The `classic` driver has been deprecated.
For more information about the `ngrok` driver, please
refer to the documentation:
  https://www.vagrantup.com/docs/share/
==> homestead-7: Detecting network information for machine...
    homestead-7: Local machine address: 127.0.0.1
    homestead-7:
    homestead-7: Note: With the local address (127.0.0.1), Vagrant Share can only
    homestead-7: share any ports you have forwarded. Assign an IP or address to your
    homestead-7: machine to expose all TCP ports. Consult the documentation
    homestead-7: for your provider ('virtualbox') for more information.
    homestead-7:
==> homestead-7: Generating new SSH key...
    homestead-7: Please enter a password to encrypt the key:
Error! Your console doesn't support hiding input. We'll ask for
input again below, but we WILL NOT be able to hide input. If this
is a problem for you, ctrl-C to exit and fix your stdin.
     homestead-7: Please enter a password to encrypt the key: test
    homestead-7: Repeat the password to confirm:
Error! Your console doesn't support hiding input. We'll ask for
input again below, but we WILL NOT be able to hide input. If this
is a problem for you, ctrl-C to exit and fix your stdin.
     homestead-7: Repeat the password to confirm: test
    homestead-7: Inserting generated SSH key into machine...
    homestead-7: Local HTTP port: 8000
    homestead-7: Local HTTPS port: disabled
    homestead-7: SSH Port: 2222
    homestead-7: Port: 2222
    homestead-7: Port: 27017
    homestead-7: Port: 33060
    homestead-7: Port: 44300
    homestead-7: Port: 54320
    homestead-7: Port: 8000
    homestead-7: Port: 8025
==> homestead-7: Creating Vagrant Share session...
C:/Program Files/HashiCorp/Vagrant/embedded/mingw32/lib/ruby/2.3.0/socket.rb:61:in `connect_internal': A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. - user specified timeout (Errno::ETIMEDOUT)
        from C:/Program Files/HashiCorp/Vagrant/embedded/mingw32/lib/ruby/2.3.0/socket.rb:139:in `connect'
        from C:/Program Files/HashiCorp/Vagrant/embedded/mingw32/lib/ruby/2.3.0/socket.rb:636:in `block in tcp'
        from C:/Program Files/HashiCorp/Vagrant/embedded/mingw32/lib/ruby/2.3.0/socket.rb:231:in `each'
        from C:/Program Files/HashiCorp/Vagrant/embedded/mingw32/lib/ruby/2.3.0/socket.rb:231:in `foreach'
        from C:/Program Files/HashiCorp/Vagrant/embedded/mingw32/lib/ruby/2.3.0/socket.rb:626:in `tcp'
        from C:/Program Files/HashiCorp/Vagrant/embedded/gems/gems/vagrant-share-1.1.9/lib/vagrant-share/activate.rb:304:in `acquire_port'
        from C:/Program Files/HashiCorp/Vagrant/embedded/gems/gems/vagrant-share-1.1.9/lib/vagrant-share/activate.rb:312:in `acquire_port'
        from C:/Program Files/HashiCorp/Vagrant/embedded/gems/gems/vagrant-share-1.1.9/lib/vagrant-share/activate.rb:2360:in `block in start_share'
        from C:/Program Files/HashiCorp/Vagrant/embedded/gems/gems/vagrant-2.0.0/lib/vagrant/plugin/v2/command.rb:235:in `block in with_target_vms'
        from C:/Program Files/HashiCorp/Vagrant/embedded/gems/gems/vagrant-2.0.0/lib/vagrant/plugin/v2/command.rb:229:in `each'
        from C:/Program Files/HashiCorp/Vagrant/embedded/gems/gems/vagrant-2.0.0/lib/vagrant/plugin/v2/command.rb:229:in `with_target_vms'
        from C:/Program Files/HashiCorp/Vagrant/embedded/gems/gems/vagrant-share-1.1.9/lib/vagrant-share/activate.rb:2273:in `start_share'
        from C:/Program Files/HashiCorp/Vagrant/embedded/gems/gems/vagrant-share-1.1.9/lib/vagrant-share/activate.rb:2967:in `execute'
        from C:/Program Files/HashiCorp/Vagrant/embedded/gems/gems/vagrant-2.0.0/lib/vagrant/cli.rb:42:in `execute'
        from C:/Program Files/HashiCorp/Vagrant/embedded/gems/gems/vagrant-2.0.0/lib/vagrant/environment.rb:308:in `cli'
        from C:/Program Files/HashiCorp/Vagrant/embedded/gems/gems/vagrant-2.0.0/bin/vagrant:138:in `<main>'

我的Homestead.yml文件是:

---
ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
    - ~/.ssh/id_rsa
folders:
    - map: ~/Documents/web/laravel
      to: /home/vagrant/Code
sites:
    - map: homestead.app
      to: /home/vagrant/Code/blog/public
databases:
    - homestead
# blackfire:
#     - id: foo
#       token: bar
#       client-id: foo
#       client-token: bar
# ports:
#     - send: 50000
#       to: 5000
#     - send: 7777
#       to: 777
#       protocol: udp

我可以ping 192.168.10.10
我正在使用Vagrant version 2.0.0和VirtualBox version 5.1.28 r117968 (Qt5.6.2)。我尝试转到文件C:/Program Files/HashiCorp/Vagrant/embedded/mingw32/lib/ruby/2.3.0/socket.rb的第61行,并且值local_addrinfo的输出为空。我还试图增加变量timeout的价值,但我没有运气。
您能帮助我解决问题吗?我不确定这是否取决于Windows,Mingw32,Vagrant,VirtualBox或Laravel Homestead。

编辑 - 在Windows上的vagrant share的当前版本中看起来有一个错误。Vagrant在试图扫描开放端口以绑定共享时会引发问题:测试每个端口时,Vagrant试图打开套接字连接,并且由于Ruby在可用的端口上没有任何聆听,因此Ruby忠实地抛出了问题的错误。

workaround - 我们可以手动调用 ngrok ,工具vagrant用于配置共享:

  1. 在https://ngrok.com/signup上创建一个帐户
  2. 复制Authtoken
  3. 安装令牌:ngrok authtoken <your-token>
  4. 开始共享:ngrok tcp 2222(其中2222是您的VM转发SSH端口)
  5. 在https://dashboard.ngrok.com/status
  6. 上找到隧道URL
  7. 使用SSH连接:ssh -p <ngrok-port> vagrant@<ngrok-hostname>

说明,如果隧道URL看起来像 tcp://0.tcp.ngrok.io:555555 ,我们将使用以下SSH命令:

ssh -p 55555 vagrant@0.tcp.ngrok.io

最新更新