I'm using Vagrant to start a VirtualBox VM in windows. In other platforms, I can just
$ vagrant ssh
to connect to the VM.
How do i connect to this Vagrant box in windows?
The way suggested in Vagrant documentation to use PuTTy also did not work:
http://docs-v1.vagrantup.com/v1/docs/getting-started/ssh.html
This question is related to
windows
ssh
virtual-machine
virtualbox
vagrant
You must patch some Vagrant code by modifying only one file, ssh.rb
.
All the info is here: https://gist.github.com/2843680
vagrant ssh
will now work also in Windows, just like in Linux.
EDIT: In newer Versions this became unnecessary. You still have to add the path to your ssh.exe
to your PATH
Variable:
Search for ssh.exe on your computer, copy the Path (i.e. C:\Program Files (x86)\Git\bin
), open System Preferences, find the Environment variable Settings, click on the Path Variable, add the path, separating the existing paths using ;
.
Install Git Bash (Comes with OpenSSH, as well as grep
, find
, perl
, sed
, etc.;)
If you have Vagrant installed, open appwiz.cpl
(AKA Add/Remove Programs) and Repair the Vagrant installation. This will make vagrant add itself to your git-bash path.
Open Git Bash (Via the start menu)
cd ~/vagrant/mybox
to your vagrant box'es folder and vagrant ssh
The accepted answer is really helpful however it may happen that instead of the following key:
%USERPROFILE%\.vagrant.d\insecure_private_key
a different key has to be converted to the Putty's format:
{vagrant_machine_root}/.vagrant/machines/default/virtualbox/private_key
Where {vagrant_machine_root}
is a folder with the Vagrantfile
of the machine we want to connect to using Putty.
As @ibizaman mentioned use vagrant ssh-config
to check what key is used by vagrant:
$ vagrant ssh-config
Host default
HostName 127.0.0.1
User vagrant
Port 2222
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile c:/dev/test/.vagrant/machines/default/virtualbox/private_key <-- HERE IS THE KEY YOU NEED TO CONVERT TO THE PUTTY FORMAT
IdentitiesOnly yes
LogLevel FATAL
There is an OpenSSH package for Windows which is basically a stripped down Cygwin. It has an msi-Installer and (after setting your path accordingly) works with "vsagrant ssh":
http://sourceforge.net/projects/opensshwindows/?source=directory
Now I have a much better solution that enables painless Vagrant upgrade. It is based on patched file.
The first line of a vagrantfile should be:
load "vagrantfile_ssh" if Vagrant::Util::Platform.windows?
And the patched vagrantfile_ssh file (originaly named ssh.rb) should exist in the same directory as vagrantfile. This is both elegant and functional.
Download the patched vagrantfile_ssh.
very simple, once you install Vagrant manager and virtual box, try installing cygwin on windows but while installing cygwin, make sure to select the SSH package, VIM package which will enable your system to login to your VM from cygwin after spinning up your machine through vagrant.
Windows 7 ( not tested on other versions )
More Info which might help with other versions ... http://www.computerhope.com/issues/ch000549.htm
Now you could also use the following plugin to connect using putty:
https://github.com/nickryand/vagrant-multi-putty
Just execute
vagrant plugin install vagrant-multi-putty
and make sure putty.exe and puttygen.exe are in your PATH
Then you'll be able to use
vagrant putty
The above mentioned executables are available from:
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
I was doing as suggested above but changing the environment variable on the command line only with PATH=%PATH%;"C:\Program files\git\usr\bin"
This did not work. But when I amended the Environment variable through Windows Settings and then started a new command prompt it worked first time!
The vagrant installation folder contains an ssh.exe that behaves like ssh(1) on linux (takes the same flags/arguments).
To see all of the arguments used, you can run vagrant ssh-config
or vagrant ssh --debug
for a more verbose output.
from Powershell:
C:\\HashiCorp\\Vagrant\\embedded\\usr\\bin/ssh.EXE [email protected] -p 2222 -o LogLevel=FATAL -o DSAAuthentication=yes -o Strict
HostKeyChecking=no -i "C:/Users/path/to/project/.vagrant/machines/default/virtualbox/private_key"
This is useful is situations where vagrant status
says your vm is in poweroff
or suspended
mode when you're positive it actually is running, to force ssh connection.
If you don't want to remember/type the above command, juste write it in a vagrant.ps1
file so you can execute it from your powershell using
.\vagrant_ssh.ps1
you can using emulator terminal cmder for windows.
Follow below the steps for instalation:
Terminal cmder on Windows
Now execute command required for settings VM vagrant, for connect only execute the command vagrant ssh; Watch cmder offers ssh client embedded.
I hope this helps.
Another solution here but only for the virtual box of windows 10 to test explorer. ssh user: IEUser ssh pass:Passw0rd!
I also met the same problem before.
In the homestead folder, use bash init.sh
.
If you don't have .ssh folder in D:/Users/your username/
, you need to get a pair of ssh keys, ssh-keygen -t rsa -C "you@homestead"
.
Edit Homestead.yaml(homestead/), authoriza: ~/.ssh/id_rsa.pub
.
keys:
- ~/.ssh/id_rsa
5.
folders:
- map: (share directory path in the host computer)
to: /home/vagrant/Code
sites:
- map: homestead.app
to: /home/vagrant/Code
You need to use git bash desktop app.
Open git bash desktop app. vagrant up
vagrant ssh
note too: when the login as: prompt appears, enter 'vagrant' as the user name (without quotes). – Snorkpete Jun 28 '12 at 14:14
Or you can go to Category->Connection->Rlogin and set the 'Auto-login username' field to 'Vagrant'.
Save the session.
Either
In your cmd
console type the following:
set PATH=%PATH%;C:\Program Files (x86)\Git\bin
OR
Permanently set the path in your system's environment variables:
C:\Program Files (x86)\Git\bin;
I think a better answer to this question would be the following:
https://eamann.com/tech/linux-flavored-windows/
Eric wrote a nice article on how to turn your windows computer into a Linux environment. Even with hacks to get Vim working natively in cmd.
If you run through this guide, which basically gets you to install git cli, and with some hacks, you can bring up a command prompt and type vagrant ssh while in the folder of your vagrant box and it will properly do the right things, no need to configure ssh keys etc. All that comes with ssh and the git cli /bin.
The power of this is that you can then actually run powershell and still get all the *nix goodness. This really simplifies your environment and helps with running Vagrant and other things.
TL;DR Download Git cli and add git/bin to PATH. Hack vim.bat in /bin to work for windows. Use ssh natively in cmd.
Another option using git binaries:
set PATH=%PATH%;C:\Program Files\Git\usr\bin
vagrant ssh
Hope this helps :)
Just a bonus after months using that on Windows: use Console instead of the Win terminal, so you can always open a new terminal tab with PATH set (configure it on options)
Add the following lines to your Vagrantfile
:
Vagrant.configure(2) do |config|
# ...
config.ssh.private_key_path = "vagrant_rsa"
config.vm.provision "shell", path: "openssh.ps1"
config.vm.provision "file", source: "./vagrant_rsa.pub", destination: "~/.ssh/authorized_keys"
end
where vagrant_rsa
and vagrant_rsa.pub
is the private and public keys located in current vagrant project folder (and generated e.g. by ssh-keygen -t rsa -C "[email protected]"
) and openssh.ps1
is:
$is_64bit = [IntPtr]::size -eq 8
# setup openssh
$ssh_download_url = "http://www.mls-software.com/files/setupssh-7.1p1-1.exe"
if (!(Test-Path "C:\Program Files\OpenSSH\bin\ssh.exe")) {
Write-Output "Downloading $ssh_download_url"
(New-Object System.Net.WebClient).DownloadFile($ssh_download_url, "C:\Windows\Temp\openssh.exe")
Start-Process "C:\Windows\Temp\openssh.exe" "/S /privsep=1 /password=D@rj33l1ng" -NoNewWindow -Wait
}
Stop-Service "OpenSSHd" -Force
# ensure vagrant can log in
Write-Output "Setting vagrant user file permissions"
New-Item -ItemType Directory -Force -Path "C:\Users\vagrant\.ssh"
C:\Windows\System32\icacls.exe "C:\Users\vagrant" /grant "vagrant:(OI)(CI)F"
C:\Windows\System32\icacls.exe "C:\Program Files\OpenSSH\bin" /grant "vagrant:(OI)RX"
C:\Windows\System32\icacls.exe "C:\Program Files\OpenSSH\usr\sbin" /grant "vagrant:(OI)RX"
Write-Output "Setting SSH home directories"
(Get-Content "C:\Program Files\OpenSSH\etc\passwd") |
Foreach-Object { $_ -replace '/home/(\w+)', '/cygdrive/c/Users/$1' } |
Set-Content 'C:\Program Files\OpenSSH\etc\passwd'
# Set shell to /bin/sh to return exit status
$passwd_file = Get-Content 'C:\Program Files\OpenSSH\etc\passwd'
$passwd_file = $passwd_file -replace '/bin/bash', '/bin/sh'
Set-Content 'C:\Program Files\OpenSSH\etc\passwd' $passwd_file
# fix opensshd to not be strict
Write-Output "Setting OpenSSH to be non-strict"
$sshd_config = Get-Content "C:\Program Files\OpenSSH\etc\sshd_config"
$sshd_config = $sshd_config -replace 'StrictModes yes', 'StrictModes no'
$sshd_config = $sshd_config -replace '#PubkeyAuthentication yes', 'PubkeyAuthentication yes'
$sshd_config = $sshd_config -replace '#PermitUserEnvironment no', 'PermitUserEnvironment yes'
# disable the use of DNS to speed up the time it takes to establish a connection
$sshd_config = $sshd_config -replace '#UseDNS yes', 'UseDNS no'
# disable the login banner
$sshd_config = $sshd_config -replace 'Banner /etc/banner.txt', '#Banner /etc/banner.txt'
# next time OpenSSH starts have it listen on th eproper port
Set-Content "C:\Program Files\OpenSSH\etc\sshd_config" $sshd_config
Write-Output "Removing ed25519 key as Vagrant net-ssh 2.9.1 does not support it"
Remove-Item -Force -ErrorAction SilentlyContinue "C:\Program Files\OpenSSH\etc\ssh_host_ed25519_key"
Remove-Item -Force -ErrorAction SilentlyContinue "C:\Program Files\OpenSSH\etc\ssh_host_ed25519_key.pub"
# use c:\Windows\Temp as /tmp location
Write-Output "Setting temp directory location"
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue "C:\Program Files\OpenSSH\tmp"
C:\Program` Files\OpenSSH\bin\junction.exe /accepteula "C:\Program Files\OpenSSH\tmp" "C:\Windows\Temp"
C:\Windows\System32\icacls.exe "C:\Windows\Temp" /grant "vagrant:(OI)(CI)F"
# add 64 bit environment variables missing from SSH
Write-Output "Setting SSH environment"
$sshenv = "TEMP=C:\Windows\Temp"
if ($is_64bit) {
$env_vars = "ProgramFiles(x86)=C:\Program Files (x86)", `
"ProgramW6432=C:\Program Files", `
"CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files", `
"CommonProgramW6432=C:\Program Files\Common Files"
$sshenv = $sshenv + "`r`n" + ($env_vars -join "`r`n")
}
Set-Content C:\Users\vagrant\.ssh\environment $sshenv
# record the path for provisioners (without the newline)
Write-Output "Recording PATH for provisioners"
Set-Content C:\Windows\Temp\PATH ([byte[]][char[]] $env:PATH) -Encoding Byte
# configure firewall
Write-Output "Configuring firewall"
netsh advfirewall firewall add rule name="SSHD" dir=in action=allow service=OpenSSHd enable=yes
netsh advfirewall firewall add rule name="SSHD" dir=in action=allow program="C:\Program Files\OpenSSH\usr\sbin\sshd.exe" enable=yes
netsh advfirewall firewall add rule name="ssh" dir=in action=allow protocol=TCP localport=22
Start-Service "OpenSSHd"
which is simplified version of joefitzgerald/packer-windows openssh setup script.
Now you can vagrant ssh
into the Windows box.
For those who use vagrant-libvirt you possibly want to forward some ports like RDP from host to guest. vagrant-libvirt uses ssh for port forwarding so you need to setup ssh on Windows like in above instructions and then you will be able to forward ports like:
config.vm.network :forwarded_port, host: 3389, guest: 3389, id: "rdp", gateway_ports: true, host_ip: '*'
Personally, I just use Cygwin. Which allows you to use many common *nix commands in Windows. SSH being one of them.
Download Putty: http://www.chiark.greenend.org.uk/~sgtatham/putty/
Using putty.exe:
Putty GUI:
HostName: 127.0.0.1
Port: 2222
When you connect(Terminal Screen):
User: vagrant
Passwd: vagrant
Before you try to connect, verify your VM using cmd.exe:
vagrant status
If it is down use:
vagrant up
I use vagrant ssh
command with git ssh
on windows 7, 8.1 and Windows 10.
To install only download msysgit from msysgit project page.
And to run ssh.exe
only include the bin folter
to windows environment variables or install git from Git Download page and copy the msysgit bin folter
to C:\Program Files\Git\bin
.
A good alternative to PuTTY is the Mintty terminal emulator. It has more configurable options than PuTTY.
Source: Stackoverflow.com