Posted at

秒速より速く vagrant ssh

More than 5 years have passed since last update.


前提


こういう人に便利かも



  • vagrant ssh はやけに起動が遅いのでなんとかしたい

  • たくさんのVMを扱うことが多く、作ったり壊したりも頻繁


  • ~/.ssh/config をVagrant用の設定だらけにしたくない


以下の場合は多分役に立たない



  • vagrant ssh-config --host NAME >> ~/.ssh/config からの ssh NAME で特に不便はない

  • 普段、同じ1〜2種類のゲストしか扱わない。


    • それvagrant ssh-configで十分




手順


.bashrc等にシェル関数を登録しておく

やっていること



  • vagrant upが完了した時点で vagrant ssh-configを実行して.vagrant_ssh_config という名前で保存しておく。


    • バックグラウンドで実行させているが好みによってフォアグラウンドにするもよし




  • vagrant ssh したら代わりに ssh -F .vagrant_ssh_config defaultを実行する。.vagrant_ssh_configが見つからなかったら vagrant sshで代用する。


  • Vagrantfile よりも下位のディレクトリにいても何とかしてくれる


.bashrc(1)

# vagrant upしたらかならず .vagrant_ssh_configを作成するバージョン

VAGRANT=`which vagrant`
vagrant() {
if [ "x$1" = 'xup' ]
then
pushd . > /dev/null
until [ -f Vagrantfile -o $PWD = '/' ]
do
cd ..
done
if
[ $PWD != '/' ]
then
$VAGRANT $@
$VAGRANT ssh-config > .vagrant_ssh_config &
fi
popd > /dev/null
elif [ "x$1" = 'xssh' ]
then
pushd . > /dev/null
until [ -f Vagrantfile -o $PWD = '/' ]
do
cd ..
done
if
[ -f .vagrant_ssh_config ]
then
ssh -F .vagrant_ssh_config default
else
vagrant ssh
fi
popd > /dev/null
else
$VAGRANT $@
fi
}


.bashrc(2)

# .vagrant_ssh_configが存在している場合、再作成しないバージョン

VAGRANT=`which vagrant`
vagrant() {
if [ "x$1" = 'xup' ]
then
pushd . > /dev/null
until [ -f Vagrantfile -o $PWD = '/' ]
do
cd ..
done
if
[ $PWD != '/' ]
then
$VAGRANT $@
if [ ! -f .vagrant_ssh_config ]
then
$VAGRANT ssh-config > .vagrant_ssh_config &
fi
fi
popd > /dev/null
elif [ "x$1" = 'xssh' ]
then
pushd . > /dev/null
until [ -f Vagrantfile -o $PWD = '/' ]
do
cd ..
done
if
[ -f .vagrant_ssh_config ]
then
ssh -F .vagrant_ssh_config default
else
vagrant ssh
fi
popd > /dev/null
else
$VAGRANT $@
fi
}



できれば改善したいポイント


  • 関数の作り方がやっつけクオリティ

  • VagrantなんだからRubyで書けばよかった

  • 応用で「簡単scp」とか作れると思うのでそのうち作りたい