How to ssh to vagrant without actually running "vagrant ssh"?
I would like to reproduce the way Vagrant logs in to my VM within a shell script using an ssh
command, so I create an alias to my Vagrant instance.
What is the command syntax to use the regular ssh
command to access it?
Solution 1:
There's a lot of answers already, but they all seem overly complicated or solve problems the asker didn't have.
simply:
# save the config to a file
vagrant ssh-config > vagrant-ssh
# run ssh with the file.
ssh -F vagrant-ssh default
Solution 2:
I've had to re-implement "vagrant ssh" because it's -c
option didn't pass on arguments properly. This is basically what it does (there might be more, but it works fine this way)
#!/bin/sh
PORT=$(vagrant ssh-config | grep Port | grep -o '[0-9]\+')
ssh -q \
-o UserKnownHostsFile=/dev/null \
-o StrictHostKeyChecking=no \
-i ~/.vagrant.d/insecure_private_key \
vagrant@localhost \
-p $PORT \
"$@"
As a one-liner (with thanks to kgadek):
ssh $(vagrant ssh-config | awk 'NR>1 {print " -o "$1"="$2}') localhost
To account for when you have more than one vagrant host, this will select the desired host, as well as cull blank lines from the config (using sed):
HOST=name-of-my-host
ssh $(vagrant ssh-config $HOST | sed '/^[[:space:]]*$/d' | awk 'NR>1 {print " -o "$1"="$2}') localhost