ssh (3) WSLでの ssh 公開鍵の手動登録 ( ssh-add, ssh-agent )¶
WSLでのパスフレーズ登録¶
WSL 環境において、パスフレーズ付き秘密鍵(例: id_rsa_level7
)を
ssh-agent 経由で登録し、 セッション中は一度のパスフレーズ入力で再利用可能にする 構成。
手動登録¶
ssh-agent (鍵を保持するプロセス) を起動.
起動時に出力される環境変数(SSH_AUTH_SOCK, SSH_AGENT_PID)を設定
ssh-add を使って秘密鍵(例: id_rsa_level7)を agent に登録
以後、パスフレーズなしで鍵が使える(セッション中有効)
自動 スクリプト¶
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
備考¶
ssh-agent.env は、1セッションごとのエージェント情報(ソケットと PID)を記録・再利用するための環境ファイル。
プロセスの生死判定に
kill -0 $SSH_AGENT_PID
を使用している。.bashrc 等には自動登録せず、必要なときにのみ実行する手動型設計。
source を使うことで、セッション中は再入力不要かつ安全に鍵が使える。