How to ssh between a cluster of Vagrant guest VMs
I have 3 Ubuntu 12.04 VMs configured with bridged networking and setup with Vagrant. I can access all of them from the host using "vagrant ssh", but I can't figure out how I connect from one guest VM to another.
Solution 1:
In the Vagrantfile give each of the machines a static private address.
Vagrant.configure(2) do |config|
config.vm.define "master" do |master|
master.vm.box = "ubuntu/trusty64"
# You may wish to use a more obscure private ip, like 10.2.2.4
master.vm.network "private_network", ip: "10.0.0.200"
end
config.vm.define "slave" do |slave|
slave.vm.box = "ubuntu/trusty64"
# You may wish to use a more obscure private ip, like 10.2.2.5
slave.vm.network "private_network", ip: "10.0.0.201"
end
End
With these machines both booted you can first ssh into one by name
vagrant ssh master
And from within this session you can ssh to another machine via its private network ip:
ssh 10.0.0.201
When prompted for a user/password you can authenticate as vagrant
/vagrant
, or further configure an ssh for yourself.
This information was adapted from the following post[1]:
- Vagrant Virtual Machine Cluster Jesse - jessesnet 2014-04-22. Retrieved 2015-02-26
Solution 2:
I've just fixed this up in a complex multi CentOS (BoxCutter 6.9) VM Vagrant setup. There are two levels to this problem, my problem was 2:
Get your Vagrant config right so that you have a "private_network" and the IP addresses of all your VM's are in the same subnet (static or DHCP): https://www.vagrantup.com/docs/networking/private_network.html
When ssh'ing between VM's if you get this error:
[root@vm01 ~]# ssh root@vm02 Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
The error message means that none of the authentication methods managed to authenticate your session, and there is no mention of a password option so password authentication has probably been disabled. To fix edit/etc/ssh/sshd_config
and check that you havePasswordAuthentication yes
and it's not commented out (#
), then restartsshd
if required:service sshd restart
(it won't disconnect any sesssions coz it's clever).
Solution 3:
If you have set them up with a bridged interface, it means they all belong to your standard LAN. Thus you can easily access a VM from another VM by issuing
ssh myname@ip_of_vm_2
You can find the IPs of your machines either directly from inside each machine, or by using a standard tool like nmap
, or by asking your router the list of DHCP clients. Lastly, if you know their IP addresses but not their BIOS names, you can use nmbd to associate a name to an IP address:
nmblookup -A IP_address
Incidentally, this ease of access (which sets your VMs on the same foot as your LAN pcs) is one of the reason why I always use the bridged interface.