ssh (3) WSLでの ssh 公開鍵の手動登録 ( ssh-add, ssh-agent )

WSLでのパスフレーズ登録

WSL 環境において、パスフレーズ付き秘密鍵(例: id_rsa_level7)を ssh-agent 経由で登録し、 セッション中は一度のパスフレーズ入力で再利用可能にする 構成。


手動登録

  1. ssh-agent (鍵を保持するプロセス) を起動.

  2. 起動時に出力される環境変数(SSH_AUTH_SOCK, SSH_AGENT_PID)を設定

  3. ssh-add を使って秘密鍵(例: id_rsa_level7)を agent に登録

  4. 以後、パスフレーズなしで鍵が使える(セッション中有効)


自動 スクリプト

ssh_setup.sh

#!/bin/bash

# 設定
KEY_PATH="/home/kent/.ssh/id_rsa_level7"
ENV_FILE="/home/kent/.ssh/ssh-agent.env"

# 環境変数をクリア(以前の値を邪魔させない)
unset SSH_AGENT_PID
unset SSH_AUTH_SOCK

# 既存のエージェントが使えるか確認
if [ -f "$ENV_FILE" ]; then
    source "$ENV_FILE" > /dev/null 2>&1
    if ! kill -0 "$SSH_AGENT_PID" 2>/dev/null; then
        echo "[ssh_setup] Dead agent found. Cleaning..."
        rm -f "$ENV_FILE"
        unset SSH_AGENT_PID
        unset SSH_AUTH_SOCK
    fi
fi

# 新しいエージェントの起動と環境保存(必要時のみ)
if [ -z "$SSH_AGENT_PID" ]; then
    echo "[ssh_setup] Starting new ssh-agent..."
    ssh-agent -s | grep -v '^echo ' > "$ENV_FILE"
    source "$ENV_FILE"
fi

# 鍵を登録(未登録なら)
if ! ssh-add -l 2>/dev/null | grep -q "$(basename "$KEY_PATH")"; then
    echo "[ssh_setup] Adding key: $KEY_PATH"
    ssh-add "$KEY_PATH"
else
    echo "[ssh_setup] Key already added: $(basename "$KEY_PATH")"
fi

ssh_cleanup.sh

#!/bin/bash

ENV_FILE="/home/kent/.ssh/ssh-agent.env"

if [ -f "$ENV_FILE" ]; then
    source "$ENV_FILE" > /dev/null 2>&1
    echo "[ssh_cleanup] Killing ssh-agent PID $SSH_AGENT_PID"
    ssh-agent -k > /dev/null
    rm -f "$ENV_FILE"
    unset SSH_AGENT_PID
    unset SSH_AUTH_SOCK
    echo "[ssh_cleanup] Cleanup complete."
else
    echo "[ssh_cleanup] No active ssh-agent found."
fi

実行方法

起動

source ~/.ssh/ssh_setup.sh
  • source コマンド必須

  • 環境変数 ( "SSH_AUTH_SOCK", "SSH_AGENT_PID" ) を 呼び出し元のシェルに引き継ぐ必要がある ため.


( 以下は無効.サブシェルに環境変数が残り、呼び出し元シェルでは見つからないため. )

bash ~/.ssh/ssh_setup.sh

終了時

source ~/.ssh/ssh_cleanup.sh

備考

  • ssh-agent.env は、1セッションごとのエージェント情報(ソケットと PID)を記録・再利用するための環境ファイル。

  • プロセスの生死判定に kill -0 $SSH_AGENT_PID を使用している。

  • .bashrc 等には自動登録せず、必要なときにのみ実行する手動型設計。

  • source を使うことで、セッション中は再入力不要かつ安全に鍵が使える。