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?
|
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.
|
Dieses Script muss in den Autostart (`System -> Einstellungen -> Startprogramme`).
|
||||||
|
|
||||||
**Das Script (`~/.local/bin/agent-watchdog.sh`):**
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#!/bin/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'" | \
|
LOG_FILE="$HOME/.ssh-agent-screenlock.log"
|
||||||
while read x; do
|
SOCKET_PATH="$HOME/.ssh/agent.sock"
|
||||||
case "$x" in
|
PID_FILE="$HOME/.ssh-agent-watchdog.pid"
|
||||||
*"boolean true"*)
|
PAUSE_FILE="$HOME/.ssh-agent-watchdog.pause"
|
||||||
# LOCK EVENT!
|
|
||||||
echo "🔒 Screen locked. Burning keys."
|
# 1. Singleton Check: Nur ein Wächter erlaubt
|
||||||
ssh-add -D
|
if [ -f "$PID_FILE" ]; then
|
||||||
;;
|
old_pid=$(cat "$PID_FILE")
|
||||||
*"boolean false"*)
|
kill -0 "$old_pid" 2>/dev/null && kill "$old_pid"
|
||||||
# UNLOCK EVENT!
|
fi
|
||||||
echo "🔓 Screen unlocked."
|
echo $$ > "$PID_FILE"
|
||||||
# Optional: Terminal öffnen für Re-Auth
|
|
||||||
# gnome-terminal -- ssh-add
|
# 2. Cleanup Trap (Aufräumen bei Exit)
|
||||||
;;
|
cleanup() { rm -f "$PID_FILE"; exit 0; }
|
||||||
esac
|
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
|
done
|
||||||
```
|
```
|
||||||
|
|
||||||
**Erklärung:**
|
### Die Integration
|
||||||
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).
|
|
||||||
|
|
||||||
---
|
Damit deine Terminals den neuen Agent immer finden, muss das Environment dynamisch geladen werden.
|
||||||
|
In deiner `.bashrc`:
|
||||||
## 🛡️ 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`:**
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Check beim Öffnen eines Terminals:
|
# Lade Agent-Info, falls vorhanden
|
||||||
# Sind Keys geladen? Wenn nein -> Fragen!
|
if [ -f ~/.ssh/agent-environment ]; then
|
||||||
|
source ~/.ssh/agent-environment
|
||||||
if [ -z "$(ssh-add -l | grep SHA)" ]; then
|
|
||||||
echo "🕵️♂️ Zero Trust Mode: Agent is empty."
|
|
||||||
ssh-add
|
|
||||||
fi
|
fi
|
||||||
```
|
```
|
||||||
|
|
||||||
**Der Flow:**
|
---
|
||||||
1. Screen Lock -> Watchdog löscht Keys (Level 3).
|
|
||||||
2. Du entsperrst, öffnest ein Terminal (oder nutzt ein offenes).
|
## 🛡️ Level 4: Deep Work & Kontrolle
|
||||||
3. Sobald du Enter drückst (neues Prompt) oder ein neues Tab öffnest -> `ssh-add` fragt dich sofort.
|
|
||||||
|
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
|
## 🦉 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.
|
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.
|
||||||
Level 3+4 ist für Admins, die "Snowden-Level" Sicherheit im Café brauchen.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**Version:** 1.0
|
**Version:** 2.0 (Debian 13 Verified)
|
||||||
**Status:** Draft
|
**Status:** Final
|
||||||
**Tags:** #Security #Paranoid #Automation #ZeroTrust
|
**Tags:** #Security #Debian13 #Mate #DBus #ZeroTrust
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**Navigation:**
|
**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 SSH_USER="$CRUMB_SSH_USER"
|
||||||
export SCP_TARGET="$CRUMB_SCP_TARGET"
|
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() {
|
function remote_help() {
|
||||||
echo "User: \$SSH_USER | Target: \$SCP_TARGET"
|
echo "User: \$SSH_USER | Target: \$SCP_TARGET"
|
||||||
echo ""
|
echo ""
|
||||||
@@ -225,6 +232,37 @@ function remote_help() {
|
|||||||
echo " crumbupload <file> -> SCP file to target"
|
echo " crumbupload <file> -> SCP file to target"
|
||||||
echo " my_keys -> List local public keys"
|
echo " my_keys -> List local public keys"
|
||||||
echo " ssh_config -> Edit SSH config"
|
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() {
|
function crumbupload() {
|
||||||
@@ -236,6 +274,7 @@ alias my_keys="ls -l ~/.ssh/*.pub"
|
|||||||
alias ssh_config="nano ~/.ssh/config"
|
alias ssh_config="nano ~/.ssh/config"
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
|
echo "⚠️ Paranoid Mode: Closing this shell clears ssh-agent keys!"
|
||||||
remote_help
|
remote_help
|
||||||
EOF
|
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