CleanUp Magic
This commit is contained in:
@@ -54,84 +54,123 @@ alias away='ssh-add -D && loginctl lock-session'
|
||||
|
||||
---
|
||||
|
||||
## 🛡️ Level 3: Automatische Amnesie (Der Watchdog)
|
||||
## 🛡️ Level 3: The Watchdog (Debian 13 / Mate Edition)
|
||||
|
||||
*Status: Getestet & Verifiziert auf Debian 13 (Trixie) mit MATE Desktop.*
|
||||
|
||||
Du willst, dass das **automatisch** passiert, wenn der Bildschirmschoner angeht?
|
||||
Das erfordert ein Script, das auf den Lock-Status "hört".
|
||||
Wir nutzen `dbus-monitor`, um direkt auf den Puls des Screensavers zu hören.
|
||||
|
||||
### Konzept (Linux/DBus):
|
||||
### Das Script: `ssh-agent-guard.sh`
|
||||
|
||||
Wir bauen einen **Wächter**, der auf `org.gnome.ScreenSaver` lauscht.
|
||||
|
||||
**Das Script (`~/.local/bin/agent-watchdog.sh`):**
|
||||
Dieses Script muss in den Autostart (`System -> Einstellungen -> Startprogramme`).
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# Lauscht auf Screen-Lock Events via DBus
|
||||
# ~/.local/bin/ssh-agent-guard.sh
|
||||
|
||||
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" | \
|
||||
while read x; do
|
||||
case "$x" in
|
||||
*"boolean true"*)
|
||||
# LOCK EVENT!
|
||||
echo "🔒 Screen locked. Burning keys."
|
||||
ssh-add -D
|
||||
;;
|
||||
*"boolean false"*)
|
||||
# UNLOCK EVENT!
|
||||
echo "🔓 Screen unlocked."
|
||||
# Optional: Terminal öffnen für Re-Auth
|
||||
# gnome-terminal -- ssh-add
|
||||
;;
|
||||
esac
|
||||
LOG_FILE="$HOME/.ssh-agent-screenlock.log"
|
||||
SOCKET_PATH="$HOME/.ssh/agent.sock"
|
||||
PID_FILE="$HOME/.ssh-agent-watchdog.pid"
|
||||
PAUSE_FILE="$HOME/.ssh-agent-watchdog.pause"
|
||||
|
||||
# 1. Singleton Check: Nur ein Wächter erlaubt
|
||||
if [ -f "$PID_FILE" ]; then
|
||||
old_pid=$(cat "$PID_FILE")
|
||||
kill -0 "$old_pid" 2>/dev/null && kill "$old_pid"
|
||||
fi
|
||||
echo $$ > "$PID_FILE"
|
||||
|
||||
# 2. Cleanup Trap (Aufräumen bei Exit)
|
||||
cleanup() { rm -f "$PID_FILE"; exit 0; }
|
||||
trap cleanup SIGINT SIGTERM
|
||||
|
||||
log() { echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"; }
|
||||
|
||||
restart_agent() {
|
||||
# "Deep Work" Check: Darf ich töten?
|
||||
if [ -f "$PAUSE_FILE" ]; then
|
||||
log "SKIP: Deep Work Mode aktiv. Agent überlebt."
|
||||
return
|
||||
fi
|
||||
|
||||
log "🔒 LOCK: Killing Agent..."
|
||||
|
||||
# Kill existing agents
|
||||
if [ -n "$SSH_AGENT_PID" ]; then kill "$SSH_AGENT_PID" 2>/dev/null; fi
|
||||
pkill -u "$USER" ssh-agent
|
||||
|
||||
# Clean Environment
|
||||
unset SSH_AUTH_SOCK SSH_AGENT_PID
|
||||
rm -f "$SOCKET_PATH"
|
||||
|
||||
# Respawn & Bind to fixed socket
|
||||
eval "$(ssh-agent -a "$SOCKET_PATH" -s)" >/dev/null
|
||||
|
||||
# Save Environment for others
|
||||
echo "export SSH_AUTH_SOCK=$SOCKET_PATH" > "$HOME/.ssh/agent-environment"
|
||||
echo "export SSH_AGENT_PID=$SSH_AGENT_PID" >> "$HOME/.ssh/agent-environment"
|
||||
|
||||
log "✨ RESPAWN: Neuer Agent (PID: $SSH_AGENT_PID)"
|
||||
}
|
||||
|
||||
# 3. MATE Hardening: Sofort sperren, keine Grace-Period
|
||||
gsettings set org.mate.screensaver lock-enabled true
|
||||
gsettings set org.mate.screensaver lock-delay 0
|
||||
|
||||
# 4. Der DBus Loop
|
||||
dbus-monitor --session "type='signal',interface='org.mate.ScreenSaver',member='ActiveChanged'" 2>/dev/null |
|
||||
while read -r line; do
|
||||
if echo "$line" | grep -q "boolean true"; then
|
||||
# EVENT: Screen Locked -> Kill Agent
|
||||
mate-screensaver-command --lock 2>/dev/null # Double Tap
|
||||
restart_agent
|
||||
fi
|
||||
done
|
||||
```
|
||||
|
||||
**Erklärung:**
|
||||
1. Wenn Screen **Locked** (`true`) -> `ssh-add -D` (Alle Keys löschen). Sicherheit hergestellt.
|
||||
2. Wenn Screen **Unlocked** (`false`) -> Du musst beim nächsten `git push` oder `ssh` dein Passwort neu eingeben (oder wir triggern ein Prompt).
|
||||
### Die Integration
|
||||
|
||||
---
|
||||
|
||||
## 🛡️ Level 4: Re-Spawn on Unlock (Die User-Anfrage)
|
||||
|
||||
Du willst direkt nach dem Entsperren nach dem Passwort gefragt werden?
|
||||
|
||||
Das ist tricky, weil der Prozess im Hintergrund läuft. Aber wir können deine `.bashrc` tunen:
|
||||
|
||||
**In deiner `.bashrc`:**
|
||||
Damit deine Terminals den neuen Agent immer finden, muss das Environment dynamisch geladen werden.
|
||||
In deiner `.bashrc`:
|
||||
|
||||
```bash
|
||||
# Check beim Öffnen eines Terminals:
|
||||
# Sind Keys geladen? Wenn nein -> Fragen!
|
||||
|
||||
if [ -z "$(ssh-add -l | grep SHA)" ]; then
|
||||
echo "🕵️♂️ Zero Trust Mode: Agent is empty."
|
||||
ssh-add
|
||||
# Lade Agent-Info, falls vorhanden
|
||||
if [ -f ~/.ssh/agent-environment ]; then
|
||||
source ~/.ssh/agent-environment
|
||||
fi
|
||||
```
|
||||
|
||||
**Der Flow:**
|
||||
1. Screen Lock -> Watchdog löscht Keys (Level 3).
|
||||
2. Du entsperrst, öffnest ein Terminal (oder nutzt ein offenes).
|
||||
3. Sobald du Enter drückst (neues Prompt) oder ein neues Tab öffnest -> `ssh-add` fragt dich sofort.
|
||||
---
|
||||
|
||||
## 🛡️ Level 4: Deep Work & Kontrolle
|
||||
|
||||
Manchmal **darf** der Agent nicht sterben (z.B. bei einem 50GB Upload über SCP, während du Kaffee holst).
|
||||
Dafür haben wir den **Watchdog-Knochen** (Pause-Funktion).
|
||||
|
||||
Im `crumbpages-doktor` (Modul Remote) gibt es jetzt Befehle:
|
||||
|
||||
- `watchdog status`: Läuft der Wächter?
|
||||
- `watchdog off`: **PAUSE**. Der Screensaver tötet den Agent nicht mehr.
|
||||
- `watchdog on`: **SCHARF**. Sicherheit wiederhergestellt.
|
||||
|
||||
> **Tipp:** Wenn du `exit` im Remote-Doktor tippst, feuert jetzt eine "Paranoid Trap" und löscht die Keys sofort (`ssh-add -D`). Sicher ist sicher.
|
||||
|
||||
---
|
||||
|
||||
## 🦉 Crystal Owl's Weisheit
|
||||
|
||||
> *"Sicherheit ist kein Zustand, sondern ein Prozess. Manchmal ein nerviger."*
|
||||
> *"Ein System ist nur so sicher wie sein schwächstes Glied. Meistens ist das Glied... Bequemlichkeit."*
|
||||
|
||||
Level 1 (`-t 300`) ist oft der beste Kompromiss aus Paranoia und Usability.
|
||||
Level 3+4 ist für Admins, die "Snowden-Level" Sicherheit im Café brauchen.
|
||||
Wir haben die Bequemlichkeit automatisiert. Der Agent stirbt, wenn du weggehst. Er wird wiedergeboren, wenn du wiederkommst – aber ohne Erinnerung (Keys). Du musst das Passwort neu eingeben. Das ist der Preis der Sicherheit.
|
||||
|
||||
---
|
||||
|
||||
**Version:** 1.0
|
||||
**Status:** Draft
|
||||
**Tags:** #Security #Paranoid #Automation #ZeroTrust
|
||||
**Version:** 2.0 (Debian 13 Verified)
|
||||
**Status:** Final
|
||||
**Tags:** #Security #Debian13 #Mate #DBus #ZeroTrust
|
||||
|
||||
---
|
||||
|
||||
**Navigation:**
|
||||
[← Zurück: SSH Agent](crumbpage-18-ssh-agent.md) | [Admin-Vektor Übersicht](crumbforest-admin-vektor.md)
|
||||
[← Zurück: Alle Themen](crumbpages-doktor.sh) | [Weiter: Tanz am Kernel (Bash Hacks)](crumbpage-20-tanz-am-kernel.md)
|
||||
|
||||
@@ -218,6 +218,13 @@ export PS1="\[\033[0;31m\](🔐 Remote) \u@\h:\w$ \[\033[0m\]"
|
||||
export SSH_USER="$CRUMB_SSH_USER"
|
||||
export SCP_TARGET="$CRUMB_SCP_TARGET"
|
||||
|
||||
# Paranoid Mode: Clear keys when this shell exits
|
||||
trap 'echo "🧹 Cleaning up keys..."; ssh-add -D 2>/dev/null' EXIT
|
||||
|
||||
# Watchdog Control Paths
|
||||
WATCHDOG_PID="$HOME/.ssh-agent-watchdog.pid"
|
||||
WATCHDOG_PAUSE="$HOME/.ssh-agent-watchdog.pause"
|
||||
|
||||
function remote_help() {
|
||||
echo "User: \$SSH_USER | Target: \$SCP_TARGET"
|
||||
echo ""
|
||||
@@ -225,6 +232,37 @@ function remote_help() {
|
||||
echo " crumbupload <file> -> SCP file to target"
|
||||
echo " my_keys -> List local public keys"
|
||||
echo " ssh_config -> Edit SSH config"
|
||||
echo " watchdog status -> Check Agent Watchdog"
|
||||
echo " watchdog off -> Pause Watchdog (for large transfers)"
|
||||
echo " watchdog on -> Resume Watchdog"
|
||||
}
|
||||
|
||||
function watchdog() {
|
||||
CMD="\$1"
|
||||
case "\$CMD" in
|
||||
status)
|
||||
if [ -f "\$WATCHDOG_PID" ] && kill -0 \$(cat "\$WATCHDOG_PID") 2>/dev/null; then
|
||||
if [ -f "\$WATCHDOG_PAUSE" ]; then
|
||||
echo "⚠️ Watchdog läuft (PID \$(cat \$WATCHDOG_PID)), ist aber PAUSIERT (Deep Work)."
|
||||
else
|
||||
echo "✅ Watchdog läuft und ist scharf (PID \$(cat \$WATCHDOG_PID))."
|
||||
fi
|
||||
else
|
||||
echo "❌ Watchdog läuft nicht."
|
||||
fi
|
||||
;;
|
||||
off|pause)
|
||||
touch "\$WATCHDOG_PAUSE"
|
||||
echo "⏸️ Watchdog pausiert. Bildschirmsperre tötet den Agent jetzt NICHT."
|
||||
;;
|
||||
on|resume)
|
||||
rm -f "\$WATCHDOG_PAUSE"
|
||||
echo "▶️ Watchdog wieder aktiv. Zero Trust re-enabled."
|
||||
;;
|
||||
*)
|
||||
echo "Usage: watchdog {status|off|on}"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
function crumbupload() {
|
||||
@@ -236,6 +274,7 @@ alias my_keys="ls -l ~/.ssh/*.pub"
|
||||
alias ssh_config="nano ~/.ssh/config"
|
||||
|
||||
echo ""
|
||||
echo "⚠️ Paranoid Mode: Closing this shell clears ssh-agent keys!"
|
||||
remote_help
|
||||
EOF
|
||||
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
DNS Report für branko.de (2025-12-10_19-53)
|
||||
========================================
|
||||
A Records:
|
||||
81.169.145.93
|
||||
---
|
||||
A Records:
|
||||
81.169.145.93
|
||||
---
|
||||
MX Records:
|
||||
5 smtpin.rzone.de.
|
||||
---
|
||||
SOA Records:
|
||||
docks17.rzone.de. hostmaster.strato-rz.de. 2022062321 86400 7200 604800 300
|
||||
---
|
||||
TXT Records: LEER
|
||||
---
|
||||
TRACE:
|
||||
NS a.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 5 ms.
|
||||
NS b.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 5 ms.
|
||||
NS c.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 5 ms.
|
||||
NS d.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 5 ms.
|
||||
NS e.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 5 ms.
|
||||
NS f.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 5 ms.
|
||||
NS g.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 5 ms.
|
||||
NS h.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 5 ms.
|
||||
NS i.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 5 ms.
|
||||
NS j.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 5 ms.
|
||||
NS k.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 5 ms.
|
||||
NS l.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 5 ms.
|
||||
NS m.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 5 ms.
|
||||
RRSIG NS 8 0 518400 20251223050000 20251210040000 61809 . Ro3x6l136NQLdoU5tLg1c6mHOjs10+HJkx4dnDxjWQ+2GbXQ/6gGL4i0 Y7cpha7GB9/RnVFOHvzvv+rrlAWwSc7/dVzOWao36XC/QWlameyY9Umi rbUdYmE8R1OEYFKIsnConMQzYhyPjJGi7E878r7UTyuuxKYQ6XGCAPGz E/ZGSAX7NXCcqYVwfOCBXPc+NPQuCnLuXEXNBsbYbp3HB6lOIORKptCY AzqIgc763uE1Xk5uE2j2oSg2qaOG8JMAXBp7uDdDscLdZBvYJfFuiDRg mQhbGZnlxq9/9JAqfwSAF6u9ccFja/pWLSDHw9mB0zZ2kaMbTjeL0r5A n0uiIw== from server fe80::2eea:dcff:fecd:194a%7 in 5 ms.
|
||||
A 81.169.145.93 from server 2607:f1c0:fe:53:185:132:34:143 in 12 ms.
|
||||
@@ -1,36 +0,0 @@
|
||||
DNS Report für gmail.de (2025-12-10_19-53)
|
||||
========================================
|
||||
A Records:
|
||||
142.250.185.229
|
||||
---
|
||||
A Records:
|
||||
142.251.39.229
|
||||
---
|
||||
MX Records:
|
||||
0 .
|
||||
---
|
||||
SOA Records:
|
||||
ns1.google.com. dns-admin.google.com. 842151538 900 900 1800 60
|
||||
---
|
||||
TXT Records:
|
||||
"v=spf1 -all"
|
||||
---
|
||||
TRACE:
|
||||
NS b.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 4 ms.
|
||||
NS c.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 4 ms.
|
||||
NS d.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 4 ms.
|
||||
NS e.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 4 ms.
|
||||
NS f.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 4 ms.
|
||||
NS g.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 4 ms.
|
||||
NS h.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 4 ms.
|
||||
NS i.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 4 ms.
|
||||
NS j.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 4 ms.
|
||||
NS k.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 4 ms.
|
||||
NS l.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 4 ms.
|
||||
NS m.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 4 ms.
|
||||
NS a.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 4 ms.
|
||||
RRSIG NS 8 0 518400 20251223050000 20251210040000 61809 . Ro3x6l136NQLdoU5tLg1c6mHOjs10+HJkx4dnDxjWQ+2GbXQ/6gGL4i0 Y7cpha7GB9/RnVFOHvzvv+rrlAWwSc7/dVzOWao36XC/QWlameyY9Umi rbUdYmE8R1OEYFKIsnConMQzYhyPjJGi7E878r7UTyuuxKYQ6XGCAPGz E/ZGSAX7NXCcqYVwfOCBXPc+NPQuCnLuXEXNBsbYbp3HB6lOIORKptCY AzqIgc763uE1Xk5uE2j2oSg2qaOG8JMAXBp7uDdDscLdZBvYJfFuiDRg mQhbGZnlxq9/9JAqfwSAF6u9ccFja/pWLSDHw9mB0zZ2kaMbTjeL0r5A n0uiIw== from server fe80::2eea:dcff:fecd:194a%7 in 4 ms.
|
||||
A 108.177.119.19 from server 2001:4860:4802:34::a in 26 ms.
|
||||
A 108.177.119.83 from server 2001:4860:4802:34::a in 26 ms.
|
||||
A 108.177.119.17 from server 2001:4860:4802:34::a in 26 ms.
|
||||
A 108.177.119.18 from server 2001:4860:4802:34::a in 26 ms.
|
||||
Reference in New Issue
Block a user