deploy.sh hinzugefügt

This commit is contained in:
2026-06-24 07:16:19 +00:00
commit c1dd470e34
+108
View File
@@ -0,0 +1,108 @@
#!/usr/bin/env bash
#
# deploy_ssh_key.sh
# - legt einen vorgegebenen ed25519-Public-Key in authorized_keys ab
# - aktiviert PubkeyAuthentication in der sshd_config
# - laesst PermitRootLogin und PasswordAuthentication ausdruecklich AN
#
# Aufruf:
# sudo ./deploy_ssh_key.sh [zielbenutzer]
# Ohne Argument wird der aufrufende Benutzer (bzw. bei sudo: SUDO_USER) genommen.
set -euo pipefail
# ----------------------------------------------------------------------------
# Konfiguration
# ----------------------------------------------------------------------------
PUBKEY='ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIF8eXjxLBHZUgZ8QT4ChRxMZ4nEBPpKye70JnM7e5XrY deads@localhosts.onl'
SSHD_CONFIG='/etc/ssh/sshd_config'
# ----------------------------------------------------------------------------
# Zielbenutzer bestimmen
# ----------------------------------------------------------------------------
TARGET_USER="${1:-${SUDO_USER:-$(id -un)}}"
if ! id "$TARGET_USER" >/dev/null 2>&1; then
echo "FEHLER: Benutzer '$TARGET_USER' existiert nicht." >&2
exit 1
fi
USER_HOME="$(getent passwd "$TARGET_USER" | cut -d: -f6)"
if [[ -z "$USER_HOME" || ! -d "$USER_HOME" ]]; then
echo "FEHLER: Home-Verzeichnis fuer '$TARGET_USER' nicht gefunden." >&2
exit 1
fi
echo ">> Zielbenutzer : $TARGET_USER"
echo ">> Home : $USER_HOME"
# ----------------------------------------------------------------------------
# 1) Key in authorized_keys ablegen
# ----------------------------------------------------------------------------
SSH_DIR="$USER_HOME/.ssh"
AUTH_KEYS="$SSH_DIR/authorized_keys"
install -d -m 700 -o "$TARGET_USER" -g "$(id -gn "$TARGET_USER")" "$SSH_DIR"
touch "$AUTH_KEYS"
# Key nur hinzufuegen, wenn er noch nicht vorhanden ist (idempotent)
if grep -qxF "$PUBKEY" "$AUTH_KEYS"; then
echo ">> Key ist bereits in authorized_keys vorhanden, ueberspringe."
else
printf '%s\n' "$PUBKEY" >> "$AUTH_KEYS"
echo ">> Key hinzugefuegt."
fi
chmod 600 "$AUTH_KEYS"
chown "$TARGET_USER":"$(id -gn "$TARGET_USER")" "$AUTH_KEYS"
# ----------------------------------------------------------------------------
# 2) sshd_config anpassen
# ----------------------------------------------------------------------------
if [[ ! -f "$SSHD_CONFIG" ]]; then
echo "FEHLER: $SSHD_CONFIG nicht gefunden." >&2
exit 1
fi
BACKUP="${SSHD_CONFIG}.bak.$(date +%Y%m%d%H%M%S)"
cp -a "$SSHD_CONFIG" "$BACKUP"
echo ">> Backup der sshd_config: $BACKUP"
# Hilfsfunktion: Direktive setzen (vorhandene Zeilen ersetzen, sonst anhaengen)
set_directive() {
local key="$1" value="$2"
# auskommentierte oder gesetzte Zeilen (auch mit fuehrenden Leerzeichen) ersetzen
if grep -Eq "^[[:space:]]*#?[[:space:]]*${key}[[:space:]]+" "$SSHD_CONFIG"; then
sed -i -E "s|^[[:space:]]*#?[[:space:]]*${key}[[:space:]]+.*|${key} ${value}|" "$SSHD_CONFIG"
else
printf '%s %s\n' "$key" "$value" >> "$SSHD_CONFIG"
fi
echo ">> gesetzt: ${key} ${value}"
}
# Keys erlauben
set_directive "PubkeyAuthentication" "yes"
# Root und Passwort sollen AN bleiben -> ausdruecklich setzen
set_directive "PermitRootLogin" "yes"
set_directive "PasswordAuthentication" "yes"
# ----------------------------------------------------------------------------
# 3) Konfiguration pruefen und sshd neu laden
# ----------------------------------------------------------------------------
echo ">> Pruefe sshd-Konfiguration ..."
if ! sshd -t; then
echo "FEHLER: sshd-Konfiguration ungueltig. Stelle Backup wieder her." >&2
cp -a "$BACKUP" "$SSHD_CONFIG"
exit 1
fi
echo ">> Konfiguration ok, lade sshd neu ..."
if command -v systemctl >/dev/null 2>&1; then
systemctl reload sshd 2>/dev/null || systemctl reload ssh 2>/dev/null || systemctl restart ssh
elif command -v service >/dev/null 2>&1; then
service ssh reload || service sshd reload || service ssh restart
else
echo ">> WARNUNG: kein systemctl/service gefunden - sshd bitte manuell neu laden."
fi
echo ">> Fertig."