Deployment

Deployment

Das Deployment von SSH-Frontière erfolgt in 4 Schritten: Binary installieren, SSH-Schlüssel konfigurieren, Login-Shell ändern und mit sudoers absichern.

1. Binary installieren

# Binary auf den Server kopieren
scp target/x86_64-unknown-linux-musl/release/ssh-frontiere root@server:/usr/local/bin/

# Auf dem Server
chmod 755 /usr/local/bin/ssh-frontiere

2. Konfiguration installieren

# Verzeichnis erstellen
mkdir -p /etc/ssh-frontiere

# Konfiguration kopieren
cp config.toml /etc/ssh-frontiere/config.toml

# Berechtigungen sichern (das Dienstkonto muss die Config lesen können)
chown root:forge-runner /etc/ssh-frontiere/config.toml
chmod 640 /etc/ssh-frontiere/config.toml

# Log-Verzeichnis erstellen
mkdir -p /var/log/ssh-frontiere
chown forge-runner:forge-runner /var/log/ssh-frontiere
chmod 755 /var/log/ssh-frontiere

3. Dienstkonto erstellen

# Benutzer mit ssh-frontiere als Login-Shell erstellen
useradd -m -s /usr/local/bin/ssh-frontiere forge-runner

Oder, wenn das Konto bereits existiert:

# Login-Shell ändern
chsh -s /usr/local/bin/ssh-frontiere forge-runner

Vorsicht: Schließen Sie Ihre aktuelle Sitzung nicht, bis Sie überprüft haben, dass die SSH-Verbindung von einer anderen Sitzung aus funktioniert.

4. SSH-Schlüssel konfigurieren (Schicht 1)

Bearbeiten Sie ~forge-runner/.ssh/authorized_keys:

# CI-Runner-Schlüssel (ops-Stufe)
command="/usr/local/bin/ssh-frontiere --level=ops",restrict ssh-ed25519 AAAA... runner-ci

# Monitoring-Schlüssel (nur read-Stufe)
command="/usr/local/bin/ssh-frontiere --level=read",restrict ssh-ed25519 AAAA... monitoring

# Admin-Schlüssel (admin-Stufe)
command="/usr/local/bin/ssh-frontiere --level=admin",restrict ssh-ed25519 AAAA... admin-deploy

Die Option command= erzwingt die Ausführung von ssh-frontiere mit der gewählten --level, unabhängig vom Befehl des Clients. Die Option restrict deaktiviert Port-Forwarding, Agent-Forwarding, PTY und X11.

# Berechtigungen sichern
chmod 700 ~forge-runner/.ssh
chmod 600 ~forge-runner/.ssh/authorized_keys
chown -R forge-runner:forge-runner ~forge-runner/.ssh

5. Sudoers konfigurieren (Schicht 3)

Erstellen Sie /etc/sudoers.d/ssh-frontiere:

# SSH-Frontière: autorisierte Befehle für das Dienstkonto
forge-runner ALL=(root) NOPASSWD: /usr/local/bin/backup-config.sh *
forge-runner ALL=(root) NOPASSWD: /usr/local/bin/deploy.sh *
forge-runner ALL=(root) NOPASSWD: /usr/local/bin/healthcheck.sh

Der Wildcard * ist nötig für Skripte, die Argumente erhalten (z.B. backup-config.sh forgejo). Skripte ohne Argumente (wie healthcheck.sh) brauchen ihn nicht.

Syntax validieren:

visudo -c -f /etc/sudoers.d/ssh-frontiere

6. Überprüfen

# Von einem anderen Terminal testen (aktuelle Sitzung nicht schließen)

# Prüfen, dass verfügbare Befehle angezeigt werden
{ echo "help"; echo "."; } | ssh forge-runner@server

# Einen Befehl testen
{ echo "infra healthcheck"; echo "."; } | ssh forge-runner@server

Tiefenverteidigung

Die 3 Schichten ergänzen sich:

SchichtMechanismusSchutz
1command= + restrict in authorized_keysErzwingt die Stufe, blockiert Forwarding/PTY
2SSH-Frontière (Login-Shell)Validiert gegen die TOML-Whitelist
3sudo in sudoersBeschränkt Systembefehle

Selbst wenn ein Angreifer einen SSH-Schlüssel kompromittiert, kann er nur in der Whitelist autorisierte Befehle ausführen. Selbst wenn er Schicht 2 umgeht, werden Privilegien durch sudoers begrenzt.

Rollback

Falls etwas nicht funktioniert, kehren Sie zur regulären Shell zurück:

# Über die Konsole (IPMI/KVM) oder ein anderes Admin-Konto
chsh -s /bin/bash forge-runner

Tipp: Sichern Sie /etc/passwd bevor Sie die Login-Shell ändern.

cp /etc/passwd /etc/passwd.bak.$(date +%Y%m%d)

Weiter: Erste Schritte — Ihr erster SSH-Befehl über SSH-Frontière.