68 lines
2.2 KiB
Bash
Executable File
68 lines
2.2 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# SSH-Agent Neustart beim Bildschirmschoner (MATE Desktop)
|
|
# Dieses Script startet den ssh-agent neu, wenn der Bildschirm gesperrt wird
|
|
#
|
|
|
|
LOG_FILE="$HOME/.ssh-agent-screenlock.log"
|
|
SOCKET_PATH="$HOME/.ssh/agent.sock"
|
|
|
|
log_message() {
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
|
|
}
|
|
|
|
restart_ssh_agent() {
|
|
log_message "Bildschirm gesperrt - SSH-Agent wird neu gestartet"
|
|
|
|
# Alte ssh-agent Prozesse beenden
|
|
if [ -n "$SSH_AGENT_PID" ]; then
|
|
kill "$SSH_AGENT_PID" 2>/dev/null
|
|
log_message "SSH-Agent PID $SSH_AGENT_PID beendet"
|
|
fi
|
|
|
|
# Alle ssh-agent Prozesse des aktuellen Users beenden
|
|
pkill -u "$USER" ssh-agent
|
|
|
|
# SSH-Agent Umgebungsvariablen löschen
|
|
unset SSH_AUTH_SOCK
|
|
unset SSH_AGENT_PID
|
|
|
|
# Alten Socket entfernen, falls vorhanden
|
|
rm -f "$SOCKET_PATH"
|
|
|
|
# Neuen ssh-agent starten und direkt an fixen Pfad binden
|
|
# -a: bind address (socket path)
|
|
eval "$(ssh-agent -a "$SOCKET_PATH" -s)" > /dev/null 2>&1
|
|
|
|
# Check if agent started successfully
|
|
if [ -z "$SSH_AGENT_PID" ]; then
|
|
log_message "FEHLER: SSH-Agent konnte nicht gestartet werden"
|
|
return
|
|
fi
|
|
|
|
# Umgebungsvariablen in Datei speichern für andere Terminals
|
|
# Dateiname angepasst an .bashrc des Users: ~/.ssh/agent-environment
|
|
cat > "$HOME/.ssh/agent-environment" <<EOF
|
|
export SSH_AUTH_SOCK=$SOCKET_PATH
|
|
export SSH_AGENT_PID=$SSH_AGENT_PID
|
|
EOF
|
|
|
|
log_message "Neuer SSH-Agent gestartet (PID: $SSH_AGENT_PID, Socket: $SOCKET_PATH)"
|
|
}
|
|
|
|
# Sicherstellen, dass der Bildschirmschoner auch wirklich sperrt
|
|
gsettings set org.mate.screensaver lock-enabled true 2>/dev/null
|
|
# Grace-Period abschalten (Sofort sperren)
|
|
gsettings set org.mate.screensaver lock-delay 0 2>/dev/null
|
|
log_message "Bildschirm-Sperre erzwungen (lock-enabled true, lock-delay 0)"
|
|
|
|
# Auf MATE Screensaver Events hören
|
|
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
|
|
# Sofort sperren anfordern, falls noch nicht geschehen
|
|
mate-screensaver-command --lock 2>/dev/null
|
|
restart_ssh_agent
|
|
fi
|
|
done
|