Some checks failed
🚀 Build & Deploy Image / Determine Build Necessity (push) Failing after 10m14s
🚀 Build & Deploy Image / Build Runtime Base Image (push) Has been skipped
🚀 Build & Deploy Image / Build Docker Image (push) Has been skipped
🚀 Build & Deploy Image / Run Tests & Quality Checks (push) Has been skipped
🚀 Build & Deploy Image / Auto-deploy to Staging (push) Has been skipped
🚀 Build & Deploy Image / Auto-deploy to Production (push) Has been skipped
Security Vulnerability Scan / Check for Dependency Changes (push) Failing after 11m25s
Security Vulnerability Scan / Composer Security Audit (push) Has been cancelled
- Remove middleware reference from Gitea Traefik labels (caused routing issues) - Optimize Gitea connection pool settings (MAX_IDLE_CONNS=30, authentication_timeout=180s) - Add explicit service reference in Traefik labels - Fix intermittent 504 timeouts by improving PostgreSQL connection handling Fixes Gitea unreachability via git.michaelschiemer.de
4.4 KiB
4.4 KiB
SSH-Zugriff Dokumentation
Übersicht
Diese Dokumentation beschreibt die SSH-Zugriffskonfiguration für den Production-Server.
SSH-Key-Generierung
Neuen SSH-Key generieren
# Auf Control-Node (lokal)
ssh-keygen -t ed25519 -C "production-server" -f ~/.ssh/production
# Oder RSA (falls ed25519 nicht unterstützt)
ssh-keygen -t rsa -b 4096 -C "production-server" -f ~/.ssh/production
Wichtig:
- Passphrase setzen (empfohlen)
- Key sicher speichern
- Private Key niemals teilen
Key-Berechtigungen
chmod 600 ~/.ssh/production
chmod 644 ~/.ssh/production.pub
SSH-Config
Control-Node Konfiguration
Datei: ~/.ssh/config
Host production
HostName <server-ip>
User deploy
IdentityFile ~/.ssh/production
ServerAliveInterval 60
ServerAliveCountMax 3
StrictHostKeyChecking yes
UserKnownHostsFile ~/.ssh/known_hosts
Wichtig:
<server-ip>durch tatsächliche IP ersetzendeployist der Standard-User (nach Setup)
SSH-Config testen
# Verbindung testen
ssh production 'whoami'
# Sollte ausgeben: deploy
# Ohne Passwort (Key-only)
ssh production
Server-Setup
Deploy-User erstellen
Auf Server (als root):
# User anlegen
adduser deploy
usermod -aG sudo deploy
# SSH-Verzeichnis erstellen
mkdir -p /home/deploy/.ssh
chmod 700 /home/deploy/.ssh
Public Key hinzufügen
Option 1: ssh-copy-id (empfohlen)
# Auf Control-Node
ssh-copy-id -i ~/.ssh/production.pub deploy@<server-ip>
Option 2: Manuell
# Auf Control-Node
cat ~/.ssh/production.pub | ssh deploy@<server-ip> \
"mkdir -p ~/.ssh && \
cat >> ~/.ssh/authorized_keys && \
chmod 600 ~/.ssh/authorized_keys && \
chmod 700 ~/.ssh"
Option 3: Via Ansible (nach initialem Setup)
# Wird automatisch über initial-server-setup.yml verwaltet
SSH-Key-only Authentication
Auf Server:
sudo nano /etc/ssh/sshd_config
Ändern:
PasswordAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
Neu starten:
sudo systemctl restart sshd
Wichtig: Vorher sicherstellen, dass SSH-Key funktioniert!
Ansible-Integration
Inventory-Konfiguration
Datei: deployment/ansible/inventory/production.yml
all:
children:
production:
hosts:
server:
ansible_host: <server-ip>
ansible_user: deploy
ansible_python_interpreter: /usr/bin/python3
ansible_ssh_private_key_file: ~/.ssh/production
Ansible-Verbindung testen
cd ~/dev/michaelschiemer/deployment/ansible
ansible production -m ping
# Sollte ausgeben: pong
Sicherheit
Best Practices
-
SSH-Key mit Passphrase
- Private Key verschlüsselt
- Passphrase bei jeder Nutzung
-
Key-Rotation
- Regelmäßig neue Keys generieren
- Alte Keys entfernen
-
Fail2ban
- Automatische Sperrung bei Brute-Force
- Optional, aber empfohlen
-
SSH-Port ändern (optional)
- Standard-Port 22 ändern
- Reduziert automatische Angriffe
-
Root-Login deaktivieren
- Nur über deploy-User
- Sudo für Admin-Tasks
Fail2ban Installation
# Auf Server
sudo apt install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
# Status prüfen
sudo fail2ban-client status sshd
Troubleshooting
SSH-Verbindung fehlgeschlagen
Problem: Permission denied (publickey)
Lösung:
- Key-Berechtigungen prüfen:
chmod 600 ~/.ssh/production - Public Key auf Server prüfen:
cat ~/.ssh/authorized_keys - SSH-Config prüfen:
ssh -v production - Server-Logs prüfen:
sudo tail -f /var/log/auth.log
Key-Format-Problem
Problem: error in libcrypto
Lösung:
- Neuen Key generieren (ed25519 oder RSA)
- WSL/libcrypto-Kompatibilität prüfen
- Key-Format prüfen:
file ~/.ssh/production
Ansible-Verbindung fehlgeschlagen
Problem: ansible production -m ping schlägt fehl
Lösung:
- SSH-Verbindung manuell testen:
ssh production - Inventory-Datei prüfen
- Python-Interpreter prüfen:
ansible production -m raw -a "which python3"
Referenzen
deployment/docs/guides/server-rebuild-plan.md- Server-Neuaufbau Plandeployment/ansible/inventory/production.yml- Ansible Inventorydeployment/ansible/playbooks/initial-server-setup.yml- Basis-Setup Playbook