diff --git a/Linux/SSH/secure_ssh.sh b/Linux/SSH/secure_ssh.sh new file mode 100644 index 0000000..75ca162 --- /dev/null +++ b/Linux/SSH/secure_ssh.sh @@ -0,0 +1,247 @@ +#!/bin/bash + +printf "\033c" + +SSH_CONFIG_DIR="/etc/ssh/sshd_config.d" +SSH_MAIN_CONFIG="/etc/ssh/sshd_config" +SSH_CONFIG_FILE="$SSH_CONFIG_DIR/secure.conf" +ED25519_KEY="/etc/ssh/ssh_host_ed25519_key" +ECDSA_KEY="/etc/ssh/ssh_host_ecdsa_key" + +RED='\033[1;31m' +GREEN='\033[1;32m' +YELLOW='\033[1;33m' +BLUE='\033[1;34m' +WHITE='\033[1;37m' +RESET='\033[0m' + +log() { + echo -e "${GREEN}$1${RESET}" +} + +warn() { + echo -e "${YELLOW}$1${RESET}" +} + +error() { + echo -e "${RED}$1${RESET}" +} + +install_package() { + local package=$1 + local cmd=$2 + warn "Installiere $package..." + if eval "$cmd" &> /dev/null; then + log "$package wurde erfolgreich installiert." + else + error "Fehler bei der Installation von $package." + exit 1 + fi +} + +if ! command -v sudo &> /dev/null; then + warn "sudo ist nicht installiert. Versuche, sudo zu installieren..." + + if command -v apt &> /dev/null; then + install_package "sudo" "apt update && apt install -y sudo" + elif command -v dnf &> /dev/null; then + install_package "sudo" "dnf install -y sudo" + elif command -v apk &> /dev/null; then + install_package "sudo" "apk add sudo" + else + error "Nicht unterstütztes System. Bitte sudo manuell installieren." + exit 1 + fi +else + log "sudo ist bereits installiert." +fi + +if ! command -v sshd &> /dev/null; then + warn "OpenSSH-Server wird installiert..." + + if command -v apt &> /dev/null; then + install_package "OpenSSH-Server" "sudo apt update && sudo apt install -y openssh-server" + elif command -v dnf &> /dev/null; then + install_package "OpenSSH-Server" "sudo dnf install -y openssh-server" + elif command -v apk &> /dev/null; then + install_package "OpenSSH-Server" "sudo apk add openssh" + else + error "Nicht unterstütztes System. Bitte OpenSSH manuell installieren." + exit 1 + fi +else + log "OpenSSH-Server ist bereits installiert." +fi + +if [ ! -f "$ED25519_KEY" ]; then + warn "Host-Schlüssel fehlt. Generiere ssh_host_ed25519_key..." + if sudo ssh-keygen -t ed25519 -f "$ED25519_KEY" -N "" &> /dev/null; then + sudo chown root:root "$ED25519_KEY" + sudo chmod 600 "$ED25519_KEY" + log "Host-Schlüssel ssh_host_ed25519_key wurde erstellt." + else + error "Fehler beim Erstellen des Host-Schlüssels." + exit 1 + fi +else + log "Host-Schlüssel ssh_host_ed25519_key ist bereits vorhanden." +fi + +if [ ! -f "$ECDSA_KEY" ]; then + warn "Host-Schlüssel fehlt. Generiere ssh_host_ecdsa_key..." + if sudo ssh-keygen -t ecdsa -b 384 -f "$ECDSA_KEY" -N "" &> /dev/null; then + sudo chown root:root "$ECDSA_KEY" + sudo chmod 600 "$ECDSA_KEY" + log "Host-Schlüssel ssh_host_ecdsa_key wurde erstellt." + else + error "Fehler beim Erstellen des Host-Schlüssels." + exit 1 + fi +else + log "Host-Schlüssel ssh_host_ecdsa_key ist bereits vorhanden." +fi + +sudo rm -f $SSH_CONFIG_DIR/* +echo "Include $SSH_CONFIG_DIR/*" | sudo tee $SSH_MAIN_CONFIG > /dev/null + +echo -en "${BLUE}Welche Benutzer dürfen sich per SSH anmelden? (Benutzer durch ${WHITE}Leerzeichen${BLUE} trennen): ${RESET}" +read SSH_USERS + +VALID_USERS="" + +# Bestimme die sudo-Gruppe abhängig von der Distribution +if [ -f /etc/os-release ]; then + . /etc/os-release + case "$ID" in + ubuntu|debian) + SUDO_GROUP="sudo" + ;; + centos|fedora|rhel|almalinux|rocky) + SUDO_GROUP="wheel" + ;; + arch|manjaro) + SUDO_GROUP="wheel" + ;; + *) + SUDO_GROUP="sudo" # Fallback auf "sudo" + ;; + esac +else + SUDO_GROUP="sudo" # Fallback falls os-release nicht existiert +fi + +for user in $SSH_USERS; do + if id "$user" &>/dev/null; then + log "Benutzer $user existiert." + VALID_USERS+="$user " + else + echo -en "${BLUE}Benutzer ${WHITE}$user${BLUE} existiert nicht. Soll dieser erstellt werden? ${YELLOW}[${WHITE}y/n${YELLOW}]${RESET}: " + read CREATE_USER + echo -en "${BLUE}Gib ein Passwort für ${WHITE}$user${BLUE} ein: ${RESET}" + read -s USER_PASSWORD + echo + if [ "$CREATE_USER" == "y" ]; then + if sudo adduser --disabled-password --gecos "" "$user" &>/dev/null && echo "$user:$USER_PASSWORD" | sudo chpasswd &>/dev/null && sudo usermod -aG $SUDO_GROUP "$user" &>/dev/null; then + log "Benutzer $user wurde erstellt und zur $SUDO_GROUP-Gruppe hinzugefügt." + sudo mkdir -p /home/$user/.ssh + sudo touch /home/$user/.ssh/authorized_keys + sudo chown -R $user:$user /home/$user/.ssh + sudo chmod 700 /home/$user/.ssh + sudo chmod 600 /home/$user/.ssh/authorized_keys + echo -en "${BLUE}Möchtest du einen SSH Public Key für ${WHITE}$user${BLUE} hinzufügen? ${YELLOW}[${WHITE}y/n${YELLOW}]${RESET}: " + read ADD_KEY + if [ "$ADD_KEY" == "y" ]; then + echo -en "${BLUE}Füge den SSH Public Key hier ein: ${RESET}" + read SSH_KEY + echo "$SSH_KEY" | sudo tee -a /home/$user/.ssh/authorized_keys &> /dev/null + fi + VALID_USERS+="$user " + else + error "Fehler bei der Erstellung von Benutzer $user." + fi + fi + fi +done + +warn "Erstelle SSH-Konfigurationsdatei..." +sudo tee $SSH_CONFIG_FILE > /dev/null <