Add troubleshooting for wrong SSH_AUTH_SOCK socket issue
Addresses the issue where multiple ssh-agent processes run and the shell
uses /tmp/ssh-* socket instead of systemd's socket.
Improvements:
- Enhanced diagnostic script detects wrong socket usage automatically
- New troubleshooting section for "Multiple ssh-agent processes running"
- Step-by-step fix to clean up ~/.bashrc and use correct socket
- Verification steps to confirm fix
Fixes the symptom: 12 agents running, SSH_AUTH_SOCK pointing to /tmp
instead of ${XDG_RUNTIME_DIR}/ssh-agent.socket
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -172,16 +172,42 @@ cat > ~/ssh-diag.sh << 'DIAGEOF'
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
echo "=== SSH Agent Diagnostic ==="
|
echo "=== SSH Agent Diagnostic ==="
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
|
AGENT_COUNT=$(pgrep -u "$USER" ssh-agent | wc -l)
|
||||||
|
EXPECTED_SOCK="${XDG_RUNTIME_DIR}/ssh-agent.socket"
|
||||||
|
|
||||||
echo "1. SSH_AUTH_SOCK: $SSH_AUTH_SOCK"
|
echo "1. SSH_AUTH_SOCK: $SSH_AUTH_SOCK"
|
||||||
echo "2. Running agents: $(pgrep -u "$USER" ssh-agent | wc -l)"
|
echo "2. Expected socket: $EXPECTED_SOCK"
|
||||||
echo "3. Loaded keys:"
|
echo "3. Running agents: $AGENT_COUNT"
|
||||||
|
echo "4. Loaded keys:"
|
||||||
ssh-add -l 2>&1
|
ssh-add -l 2>&1
|
||||||
echo ""
|
echo ""
|
||||||
echo "4. Systemd service:"
|
echo "5. Systemd service:"
|
||||||
systemctl --user status ssh-agent 2>&1 | head -5
|
systemctl --user status ssh-agent 2>&1 | head -5
|
||||||
echo ""
|
echo ""
|
||||||
echo "5. Shell RC has SSH code:"
|
echo "6. Shell RC has SSH code:"
|
||||||
grep -q "SSH Agent" ~/.bashrc && echo " ✓ Found" || echo " ✗ Not found"
|
grep -q "SSH Agent" ~/.bashrc && echo " ✓ Found" || echo " ✗ Not found"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Detect issues
|
||||||
|
if [[ "$AGENT_COUNT" -gt 1 ]]; then
|
||||||
|
echo "⚠ WARNING: $AGENT_COUNT agents running (should be 1)"
|
||||||
|
echo " Fix: See 'Multiple ssh-agent processes' section"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$SSH_AUTH_SOCK" != "$EXPECTED_SOCK" ]]; then
|
||||||
|
echo "⚠ WARNING: Using wrong socket!"
|
||||||
|
echo " Current: $SSH_AUTH_SOCK"
|
||||||
|
echo " Should be: $EXPECTED_SOCK"
|
||||||
|
echo " Fix: See 'Multiple ssh-agent processes' section"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if systemctl --user is-active ssh-agent >/dev/null 2>&1; then
|
||||||
|
echo "✓ Systemd service is running"
|
||||||
|
else
|
||||||
|
echo "✗ Systemd service NOT running"
|
||||||
|
echo " Fix: systemctl --user start ssh-agent"
|
||||||
|
fi
|
||||||
DIAGEOF
|
DIAGEOF
|
||||||
|
|
||||||
chmod +x ~/ssh-diag.sh
|
chmod +x ~/ssh-diag.sh
|
||||||
@@ -237,19 +263,46 @@ systemctl --user daemon-reload
|
|||||||
systemctl --user restart ssh-agent
|
systemctl --user restart ssh-agent
|
||||||
```
|
```
|
||||||
|
|
||||||
**Multiple ssh-agent processes running**
|
**Multiple ssh-agent processes running (shell using wrong socket)**
|
||||||
|
|
||||||
|
If diagnostic shows many agents (e.g., 12) and SSH_AUTH_SOCK points to `/tmp/ssh-*` instead of `${XDG_RUNTIME_DIR}/ssh-agent.socket`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Kill all agents
|
# 1. Kill all agents and restart systemd service cleanly
|
||||||
pkill -u "$USER" ssh-agent
|
pkill -u "$USER" ssh-agent
|
||||||
|
|
||||||
# Restart systemd service cleanly
|
|
||||||
systemctl --user restart ssh-agent
|
systemctl --user restart ssh-agent
|
||||||
|
|
||||||
# Reload shell
|
# 2. Check your runtime directory
|
||||||
|
echo "Should use: ${XDG_RUNTIME_DIR}/ssh-agent.socket"
|
||||||
|
echo "Currently using: $SSH_AUTH_SOCK"
|
||||||
|
|
||||||
|
# 3. Clean up ~/.bashrc - remove OLD/duplicate SSH agent code
|
||||||
|
cp ~/.bashrc ~/.bashrc.backup
|
||||||
|
sed -i '/# SSH Agent/,/fi$/d' ~/.bashrc
|
||||||
|
|
||||||
|
# 4. Add clean version
|
||||||
|
cat >> ~/.bashrc << 'BASHEOF'
|
||||||
|
|
||||||
|
# SSH Agent - Use systemd user service
|
||||||
|
export SSH_AUTH_SOCK="${XDG_RUNTIME_DIR}/ssh-agent.socket"
|
||||||
|
|
||||||
|
# Auto-add key on login
|
||||||
|
if [ -z "$(ssh-add -l 2>/dev/null | grep id_ed25519)" ]; then
|
||||||
|
ssh-add ~/.ssh/id_ed25519 2>/dev/null
|
||||||
|
fi
|
||||||
|
BASHEOF
|
||||||
|
|
||||||
|
# 5. Apply immediately
|
||||||
source ~/.bashrc
|
source ~/.bashrc
|
||||||
|
|
||||||
|
# 6. Verify fix
|
||||||
|
echo "Agents running: $(pgrep -u "$USER" ssh-agent | wc -l)" # Should be 1
|
||||||
|
echo "Using socket: $SSH_AUTH_SOCK" # Should contain XDG_RUNTIME_DIR
|
||||||
|
ssh-add -l # Should show your key
|
||||||
```
|
```
|
||||||
|
|
||||||
|
The issue happens when old SSH agent code in ~/.bashrc conflicts with the systemd method.
|
||||||
|
|
||||||
**"identity_sign: private key contents do not match public"**
|
**"identity_sign: private key contents do not match public"**
|
||||||
|
|
||||||
This critical error means the public key on Gitea doesn't match your private key.
|
This critical error means the public key on Gitea doesn't match your private key.
|
||||||
|
|||||||
Reference in New Issue
Block a user