今まで.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
ポイント
生存確認の精度
ps -p “$SSH_AGENT_PID” を使うことで、OS再起動などでPIDが変わっても確実に検知して再起動します。ファイル存在チェック
[ -f “$key” ] を挟んでいるため、もし鍵ファイルを削除したり名前を変えたりしても、エラーでシェル起動が止まることはありません。WezTermでの挙動
最初の1ウィンドウ目(あるいはPC起動後最初)でパスフレーズを入力すれば、WezTermで 画面分割をしても、すでにエージェントに鍵が入っているため、2回目以降の入力は不要になります。