deploy.sh hinzugefügt
This commit is contained in:
@@ -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."
|
||||
Reference in New Issue
Block a user