今まで.bashrcに書いていたssh-agentの起動とssh-addの方法だと、
WezTermの分割が増えるたびに、
SSHのパスフレーズを打ち直すのがずっと気になっていた。

だから、WSL起動時に一度聞かれるだけの動作に変更した。
ついでに、複数のカギを登録できるようにしておいた。

本来は、.profile.bash_profileに書く内容だと思う。
ただ、WSL + WezTerm だとログインシェルとして扱われないことが多く、
うまく動かない場面があるらしい。

なので今回は、確実に実行される.bashrcに置くことにした。

keychain使えよ、って天の声は無視することにしている。
こちとら、ただ日記を書く環境を整えてるだけなんだ。

今までの.bashrc

# --- ssh-agent auto start ---
if [ -z "$SSH_AUTH_SOCK" ]; then
    eval "$(ssh-agent -s)" >/dev/null
fi

# 鍵が登録されていない場合のみ追加
ssh-add -l &>/dev/null
if [ $? -ne 0 ]; then
    ssh-add ~/.ssh/xserver.key 2>/dev/null
fi

改良した.bashrc

# --- ssh-agent 永続化設定 ---
SSH_AGENT_ENV="$HOME/.ssh/agent-env"

# エージェント情報の読み込みと生存確認
if [ -f "$SSH_AGENT_ENV" ]; then
    . "$SSH_AGENT_ENV" > /dev/null
fi

# プロセスが動いていなければ新しく起動
if ! ps -p "$SSH_AGENT_PID" > /dev/null 2>&1; then
    ssh-agent -s > "$SSH_AGENT_ENV"
    . "$SSH_AGENT_ENV" > /dev/null
fi

# --- 複数の鍵を一括管理 ---
# 追加したい鍵のフルパスをここに並べる
KEYS=(
    "$HOME/.ssh/xserver.key"
    "$HOME/.ssh/another.key"
    "$HOME/.ssh/work.key"
)

# エージェントに鍵が1つも登録されていない場合のみ実行
if ! ssh-add -l > /dev/null 2>&1; then
    echo "SSH Agent: Adding keys..."
    for key in "${KEYS[@]}"; do
        if [ -f "$key" ]; then
            ssh-add "$key" 2>/dev/null
        else
            echo "Warning: Key file not found: $key"
        fi
    done
fi

ポイント

  1. 生存確認の精度
    ps -p “$SSH_AGENT_PID” を使うことで、OS再起動などでPIDが変わっても確実に検知して再起動します。

  2. ファイル存在チェック
    [ -f “$key” ] を挟んでいるため、もし鍵ファイルを削除したり名前を変えたりしても、エラーでシェル起動が止まることはありません。

  3. WezTermでの挙動
    最初の1ウィンドウ目(あるいはPC起動後最初)でパスフレーズを入力すれば、WezTermで 画面分割をしても、すでにエージェントに鍵が入っているため、2回目以降の入力は不要になります。