No commit activity in last 3 years
No release in over 3 years
Enables Vagrant to cache the ssh-config of running boxes
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 1.16
~> 10.0
 Project Readme

vagrant-ssh-config-cache

vagrant-ssh-config-cache is a Vagrant plugin for caching the ssh-config of running boxes. It automatically caches the ssh-config of machines anytime they are brought up, and removes the caches when the machines are halted or destroyed.

Caches for each machine are stored at .vagrant/machines/<name>/ssh-config-cache. The content each cache file is a valid command-line invocation of ssh.

Why?

Sometimes you have a Vagrantfile that takes a long time to evaluate. This overhead is incurred every time you run vagrant ssh. In a test environment, with a specific Vagrantfile, ssh-config caching was observed to reduce connection times from 16 seconds, to less than one second.

Installation

Use vagrant plugin to install the gem in your Vagrant environment:

$ vagrant plugin install vagrant-ssh-config-cache

Usage

$ vagrant ssh-config-cache -h
Usage: vagrant ssh-config-cache <command> [<args>]

Available subcommands:
     reset
     update

$ vagrant ssh-config-cache reset -h
Usage: vagrant ssh-config-cache reset [target...]

$ vagrant ssh-config-cache update -h
Usage: vagrant ssh-config-cache update [target...]

Example

Update the caches for all machines and then connect to the machine named 'default' using the cached ssh config:

$ vagrant ssh-config-cache update
$ source .vagrant/machines/default/ssh-config-cache

vssh

The following vssh bash function can be used in place of invoking vagrant ssh <target>:

function vssh() {
  if [ $# -eq 0 ]; then
    echo "Error: Please specify a vagrant machine."
    return
  fi
  VAGRANT_MACHINE=$1
  SSH_CONFIG_CACHE_FILE=$PWD/.vagrant/machines/$VAGRANT_MACHINE/ssh-config-cache
  if [ ! -f "$SSH_CONFIG_CACHE_FILE" ]; then
    echo "Notice: The cache for $VAGRANT_MACHINE does not exist. Updating the cache."
    vagrant ssh-config-cache update $VAGRANT_MACHINE
  fi
  if [ -f "$SSH_CONFIG_CACHE_FILE" ]; then
    source $SSH_CONFIG_CACHE_FILE
    if [ $? -eq 255 ]; then
      echo "Error: Unable to connect to the machine. Deleting the cache."
      rm -f $SSH_CONFIG_CACHE_FILE
    fi
  else
    echo "Error: Unable to update the cache for $VAGRANT_MACHINE. Please verify that the machine is running."
  fi
}

Example: $ vssh default

Acknowledgements

This project was inspired by vagrant_ssh_cache. This project improves on that one by being a vagrant plugin that updates the cache automatically when the machine is brought up.

Thanks for the idea, Tom!

Development

You can test with a vendored Vagrant:

$ bin/setup
$ bundle exec vagrant ssh-config-cache

...or by building and installing the gem into the system Vagrant:

$ bundle exec rake build
$ vagrant plugin uninstall vagrant-ssh-config-cache
$ vagrant plugin install pkg/vagrant-ssh-config-cache-*.gem
$ vagrant ssh-config-cache -h

To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/bacongravy/vagrant-ssh-config-cache.