Update Linux/SSH/README.md
This commit is contained in:
@@ -1,4 +1,18 @@
|
|||||||
# Erstellen einer sicheren SSH Anmeldung
|
# Erstellen einer sicheren SSH-Anmeldung
|
||||||
|
|
||||||
|
Dieses Skript richtet OpenSSH mit sicheren Einstellungen ein und erstellt bei Bedarf Benutzer mit SSH-Zugriff.
|
||||||
|
Es stellt sicher, dass `sudo` und der `OpenSSH-Server` installiert sind und generiert sichere Host-Schlüssel (Ed25519).
|
||||||
|
Das Skript erlaubt es, SSH-Zugriff nur für bestimmte Benutzer zu konfigurieren.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Anforderungen
|
||||||
|
- AlmaLinux, Debian, Ubuntu oder Alpine Linux
|
||||||
|
- Root- oder `sudo`-Rechte
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Skript: Secure SSH Setup
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
@@ -51,17 +65,22 @@ install_package() {
|
|||||||
local package=$1
|
local package=$1
|
||||||
local cmd=$2
|
local cmd=$2
|
||||||
warn "Installiere $package..."
|
warn "Installiere $package..."
|
||||||
( $cmd &> /dev/null ) 2>&1 & # Ausgaben vollständig unterdrücken
|
|
||||||
disown # Prozess von der Shell trennen, keine Ausgabe von [1] 3562
|
mkfifo /tmp/spinner_pipe 2>/dev/null
|
||||||
|
$cmd &> /tmp/spinner_pipe & # Prozess läuft im Hintergrund
|
||||||
local pid=$!
|
local pid=$!
|
||||||
spinner $pid
|
disown $pid # Entfernt Jobsteuerung, kein [1] 3562
|
||||||
|
spinner $pid < /tmp/spinner_pipe &
|
||||||
wait $pid
|
wait $pid
|
||||||
|
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
log "$package wurde erfolgreich installiert."
|
log "$package wurde erfolgreich installiert."
|
||||||
else
|
else
|
||||||
error "Fehler bei der Installation von $package."
|
error "Fehler bei der Installation von $package."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
rm -f /tmp/spinner_pipe
|
||||||
}
|
}
|
||||||
|
|
||||||
# Überprüfe und installiere sudo, falls nicht vorhanden
|
# Überprüfe und installiere sudo, falls nicht vorhanden
|
||||||
@@ -103,82 +122,20 @@ fi
|
|||||||
# Generiere fehlende Host-Schlüssel (Ed25519)
|
# Generiere fehlende Host-Schlüssel (Ed25519)
|
||||||
if [ ! -f "$ED25519_KEY" ]; then
|
if [ ! -f "$ED25519_KEY" ]; then
|
||||||
warn "Host-Schlüssel fehlt. Generiere ssh_host_ed25519_key..."
|
warn "Host-Schlüssel fehlt. Generiere ssh_host_ed25519_key..."
|
||||||
( sudo ssh-keygen -t ed25519 -f $ED25519_KEY -N "" &> /dev/null ) 2>&1 &
|
|
||||||
spinner $!
|
mkfifo /tmp/keygen_pipe 2>/dev/null
|
||||||
|
( sudo ssh-keygen -t ed25519 -f $ED25519_KEY -N "" &> /tmp/keygen_pipe ) &
|
||||||
|
local pid=$!
|
||||||
|
disown $pid
|
||||||
|
spinner $pid < /tmp/keygen_pipe &
|
||||||
|
wait $pid
|
||||||
|
|
||||||
sudo chown root:root $ED25519_KEY
|
sudo chown root:root $ED25519_KEY
|
||||||
sudo chmod 600 $ED25519_KEY
|
sudo chmod 600 $ED25519_KEY
|
||||||
log "Host-Schlüssel ssh_host_ed25519_key wurde erstellt."
|
log "Host-Schlüssel ssh_host_ed25519_key wurde erstellt."
|
||||||
|
|
||||||
|
rm -f /tmp/keygen_pipe
|
||||||
else
|
else
|
||||||
log "Host-Schlüssel ssh_host_ed25519_key ist bereits vorhanden."
|
log "Host-Schlüssel ssh_host_ed25519_key ist bereits vorhanden."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# SSHD-Konfigurationsverzeichnis sicherstellen und alte Konfigs löschen
|
|
||||||
warn "Lösche bestehende Konfigurationen in $SSH_CONFIG_DIR ..."
|
|
||||||
sudo mkdir -p $SSH_CONFIG_DIR
|
|
||||||
sudo rm -f $SSH_CONFIG_DIR/*
|
|
||||||
|
|
||||||
# Haupt-sshd_config aufräumen und Include setzen
|
|
||||||
warn "Passe die Haupt-sshd_config an..."
|
|
||||||
|
|
||||||
sudo tee $SSH_MAIN_CONFIG > /dev/null <<EOL
|
|
||||||
# Minimale SSHD-Konfiguration
|
|
||||||
Include $SSH_CONFIG_DIR/*.conf
|
|
||||||
EOL
|
|
||||||
|
|
||||||
# Benutzer abfragen, die sich per SSH anmelden dürfen
|
|
||||||
echo -en "${BLUE}Welche Benutzer dürfen sich per SSH anmelden? (Benutzer durch Leerzeichen trennen): ${RESET}"
|
|
||||||
read SSH_USERS
|
|
||||||
|
|
||||||
# Benutzer verifizieren und ggf. erstellen
|
|
||||||
VALID_USERS=""
|
|
||||||
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
|
|
||||||
if [ "$CREATE_USER" == "y" ]; then
|
|
||||||
sudo adduser $user
|
|
||||||
sudo passwd $user
|
|
||||||
sudo usermod -aG wheel $user
|
|
||||||
log "Benutzer $user wurde erstellt und zur sudo-Gruppe hinzugefügt."
|
|
||||||
|
|
||||||
# SSH-Verzeichnis und authorized_keys erstellen
|
|
||||||
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
|
|
||||||
fi
|
|
||||||
VALID_USERS+="$user "
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
warn "Erstelle SSH-Konfigurationsdatei..."
|
|
||||||
|
|
||||||
sudo tee $SSH_CONFIG_FILE > /dev/null <<EOL
|
|
||||||
# SSH Config Datei mit max Security
|
|
||||||
|
|
||||||
AddressFamily inet
|
|
||||||
Port 22
|
|
||||||
Protocol 2
|
|
||||||
|
|
||||||
HostKey /etc/ssh/ssh_host_ed25519_key
|
|
||||||
|
|
||||||
AllowUsers $VALID_USERS
|
|
||||||
EOL
|
|
||||||
|
|
||||||
warn "Prüfe SSH-Konfiguration..."
|
|
||||||
sudo sshd -t && sudo systemctl restart sshd && log "SSH-Dienst erfolgreich neu gestartet."
|
|
||||||
|
|
||||||
log "Setup abgeschlossen! Nur folgende Benutzer dürfen sich per SSH anmelden: ${WHITE}$VALID_USERS"
|
|
||||||
```
|
```
|
||||||
Reference in New Issue
Block a user