GitHubにpush,pullするときのパスワード認証が鬱陶しいのでzshで何とかする

皆さんお馴染み The world’s leading software development platform · GitHub ですが、
パスワード付きの鍵を作ってしまうと、 push, pull のたびに認証を要求されてしまいます。

GitHub曰く「別にパスワード付けても凄くセキュアになるわけじゃないよ」だそうですが、
同時に「でもパスワード付ければちょっとはセキュアになるよ」とも言っています。
とても親切です。

でも認証が面倒くさいじゃん!!

という人が僕以外にも多数いたようで、公式のヘルプページスクリプトが載ってました。
以下抜粋:

SSH_ENV="$HOME/.ssh/environment"

# start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."
    # spawn ssh-agent
    ssh-agent | sed 's/^echo/#echo/' > "$SSH_ENV"
    echo succeeded
    chmod 600 "$SSH_ENV"
    . "$SSH_ENV" > /dev/null
    ssh-add
}

# test for identities
function test_identities {
    # test whether standard identities have been added to the agent already
    ssh-add -l | grep "The agent has no identities" > /dev/null
    if [ $? -eq 0 ]; then
        ssh-add
        # $SSH_AUTH_SOCK broken so we start a new proper agent
        if [ $? -eq 2 ];then
            start_agent
        fi
    fi
}

# check for running ssh-agent with proper $SSH_AGENT_PID
if [ -n "$SSH_AGENT_PID" ]; then
    ps -ef | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
    if [ $? -eq 0 ]; then
  test_identities
    fi
# if $SSH_AGENT_PID is not properly set, we might be able to load one from
# $SSH_ENV
else
    if [ -f "$SSH_ENV" ]; then
  . "$SSH_ENV" > /dev/null
    fi
    ps -ef | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
    if [ $? -eq 0 ]; then
        test_identities
    else
        start_agent
    fi
fi

どうやらフォーラムに投稿されたものらしいです。
で、これを .bashrc なり .profile なりに書けば自動的に ssh-agent が立ち上がるぞと。
試してみたら愛用している zsh でも動きました。

しかし問題がありまして、既に立ち上がってるssh-agentがあるとコケるんですね。
端末を閉じる前に毎度毎度

$ ps aux | grep ssh-agent
$ kill $SSH_AGENT_PID
$ kill $SSH_AGENT_PID
$ kill ...

なんてやってたらパスワード認証よりも面倒くさい。
私は不精ですから(キリッ

というわけで zsh のコールバックを利用して、
zshが終了するときに自動的にssh-agentを終了させる」
が実装できないかどうか調べてみたら、あっさり解決したのでメモメモ。

具体的には .zshrc の末尾(でもどこでもいいけど)に

TRAPEXIT() {
    ssh-agent -k
}

と書くだけでした。

Signalについては詳しくないので TRAPINT のほうが確実かも知れませんが、
とりあえずこれで動いてくれているのでとりあえず良し。

でもこれ、端末を複数立ち上げるとまた問題になりそうですね…。
screenを使う手もあるんですが、窓が沢山無いと落ち着かない私。
どうしたものかしら…。