前提
こういう人に便利かも
-
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」とか作れると思うのでそのうち作りたい