Laravel Homestead SSH remote sharing issue

Viewed 1701

I'm testing for the first time the share option in Vagrant and I'm doing it on a new Laravel Homestead VM provisioned Virtualbox provider on a Windows 7 Ultimate SP1 32-bit host machine.
I am using MINGW32 as shell and I disabled the Windows Firewall (domain, local and public) for being sure that is not affecting my actions. Vagrant is not able to find the HTTP port automatically so I'm specifying it.
If I run the following command everything goes well:

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:

However the following command fails:

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>'

My Homestead.yml file is:

---
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

and I'm able to ping 192.168.10.10.
I am using Vagrant version 2.0.0 and Virtualbox version 5.1.28 r117968 (Qt5.6.2). I tried to go to the line 61 of the file C:/Program Files/HashiCorp/Vagrant/embedded/mingw32/lib/ruby/2.3.0/socket.rb and the output of the value local_addrinfo is empty. I also tried to increase the value of the variable timeout but I had no luck.
Could you please helping me in solving the problem? I'm not sure if it depends on Windows, MINGW32, Vagrant, Virtualbox or Laravel Homestead.

1 Answers

Edit - It looks like there's a bug in the current version of vagrant share on Windows. Vagrant throws the error in the question while attempting to scan for an open port to bind for sharing: when testing each port, Vagrant attempts to open a socket connection and, because nothing listens on an available port, Ruby dutifully throws the error in question.

Workaround - We can manually invoke ngrok, the tool Vagrant uses to configure sharing:

  1. Create an account at https://ngrok.com/signup
  2. Copy the authtoken
  3. Install the token: ngrok authtoken <your-token>
  4. Start sharing: ngrok tcp 2222 (where 2222 is your VM's forwarded SSH port)
  5. Find the tunnel URL at https://dashboard.ngrok.com/status
  6. Connect using SSH: ssh -p <ngrok-port> vagrant@<ngrok-hostname>

To illustrate, if the tunnel URL looks like tcp://0.tcp.ngrok.io:55555, we'll use the following SSH command:

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