秒速より速く vagrant ssh

  • 14
    Like
  • 0
    Comment
More than 1 year has 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」とか作れると思うのでそのうち作りたい