# Autossh Setup - Abgeschlossen

**Datum**: 2025-11-02  
**Status**: ? Erfolgreich konfiguriert  
**Server**: Production (94.16.110.151)

---

## Durchgef?hrte Schritte

### 1. Installation von Autossh

Autossh war bereits auf dem System installiert:
```bash
/usr/bin/autossh
```

### 2. SSH-Konfiguration erweitert

Die SSH-Config (`~/.ssh/config`) wurde erweitert mit folgenden Eintr?gen:

```ssh-config
Host production
    HostName 94.16.110.151
    User deploy
    IdentityFile ~/.ssh/production
    ServerAliveInterval 60
    ServerAliveCountMax 3
    TCPKeepAlive yes
    Compression yes
    StrictHostKeyChecking accept-new
```

**Wichtige Optionen:**
- `ServerAliveInterval 60`: Sendet alle 60 Sekunden ein Keep-Alive-Signal
- `ServerAliveCountMax 3`: Nach 3 fehlgeschlagenen Versuchen aufgeben
- `TCPKeepAlive yes`: Nutzt TCP Keep-Alive f?r zus?tzliche Persistenz

### 3. Systemd Service erstellt

Systemd Service wurde erstellt unter:
```
~/.config/systemd/user/autossh-production.service
```

**Service-Konfiguration:**
```ini
[Unit]
Description=AutoSSH for production
After=network.target

[Service]
Type=simple
Environment="AUTOSSH_GATETIME=0"
Environment="AUTOSSH_POLL=10"
ExecStart=/usr/bin/autossh -M 20000 -N -o "ServerAliveInterval=60" -o "ServerAliveCountMax=3" production
Restart=always
RestartSec=10

[Install]
WantedBy=default.target
```

**Wichtige Parameter:**
- `-M 20000`: Monitoring-Port (autossh nutzt diesen zur Verbindungs?berwachung)
- `-N`: Keine Remote-Commands ausf?hren (nur persistente Verbindung)
- `AUTOSSH_GATETIME=0`: Keine Wartezeit nach Start (sofortige Verbindung)
- `AUTOSSH_POLL=10`: Polling-Intervall in Sekunden

**Hinweis**: Das `-f` Flag wurde entfernt, da es mit systemd Type=simple nicht kompatibel ist.

### 4. Service aktiviert und gestartet

```bash
# Service aktivieren (startet automatisch beim Login)
systemctl --user enable autossh-production.service

# Service starten
systemctl --user start autossh-production.service
```

### 5. Status ?berpr?ft

Service Status:
```
? autossh-production.service - AutoSSH for production
     Loaded: loaded (/home/michael/.config/systemd/user/autossh-production.service; enabled; preset: enabled)
     Active: active (running) since Sun 2025-11-02 18:21:06 CET
   Main PID: 35533 (autossh)
      Tasks: 2 (limit: 14999)
     Memory: 1.7M
```

**Laufende Prozesse:**
- Autossh Main Process: PID 35533
- SSH Connection Process: PID 35537

---

## Verbindungstest

SSH-Verbindung erfolgreich getestet:
```bash
ssh production "echo 'Connection test successful'"
# Output: Connection test successful
```

---

## Service-Management

### Status pr?fen
```bash
systemctl --user status autossh-production.service
```

### Logs anzeigen
```bash
journalctl --user -u autossh-production.service -f
```

### Service stoppen
```bash
systemctl --user stop autossh-production.service
```

### Service neu starten
```bash
systemctl --user restart autossh-production.service
```

### Service deaktivieren
```bash
systemctl --user disable autossh-production.service
```

---

## Funktionsweise

Autossh ?berwacht die SSH-Verbindung kontinuierlich:

1. **Monitoring-Port**: Port 20000 wird genutzt, um die Verbindung zu ?berwachen
2. **Keep-Alive**: Alle 60 Sekunden wird ein Keep-Alive-Signal gesendet
3. **Automatischer Neustart**: Bei Verbindungsabbruch wird die Verbindung automatisch neu aufgebaut
4. **Systemd Integration**: Bei Service-Fehler startet systemd den Service nach 10 Sekunden neu

---

## Bekannte Probleme & L?sungen

### Problem 1: Monitoring-Port Format
**Fehler**: `invalid port "127.0.0.1"`  
**L?sung**: `-M` Parameter sollte nur die Port-Nummer sein, nicht `IP:Port`
```bash
# Falsch:
-M 127.0.0.1:20000

# Richtig:
-M 20000
```

### Problem 2: `-f` Flag mit systemd
**Fehler**: Service startet, beendet sich aber sofort  
**L?sung**: `-f` Flag entfernen bei systemd Type=simple (systemd ?bernimmt Background-Operation)

### Problem 3: Service startet nicht automatisch
**L?sung**: User lingering aktivieren f?r automatischen Start ohne Login:
```bash
sudo loginctl enable-linger $USER
```

---

## N?chste Schritte

### F?r weitere Server
Das Setup-Script kann f?r weitere Server verwendet werden:
```bash
./scripts/setup-autossh.sh production  # Nur Production
./scripts/setup-autossh.sh git         # Nur Git Server
./scripts/setup-autossh.sh both        # Beide
```

### SSH-Tunnel einrichten
Falls SSH-Tunnel ben?tigt werden (z.B. Port-Forwarding):
```bash
# Lokalen Port weiterleiten
autossh -M 20002 -N -L 8080:localhost:80 production
```

### Monitoring
Regelm??ig den Service-Status ?berpr?fen:
```bash
systemctl --user status autossh-production.service
journalctl --user -u autossh-production.service --since "1 hour ago"
```

---

## Makefile-Befehle

Das Projekt bietet jetzt folgende Makefile-Befehle f?r SSH-Verbindungen:

```bash
# SSH-Verbindung zum Production-Server ?ffnen
make ssh
# oder
make ssh-production

# SSH-Verbindung zum Git-Server ?ffnen
make ssh-git

# Status der autossh-Services pr?fen
make ssh-status

# Logs der autossh-Services anzeigen
make ssh-logs

# Autossh einrichten
make setup-autossh
```

## Referenzen

- **Setup-Script**: `scripts/setup-autossh.sh`
- **Dokumentation**: `docs/deployment/AUTOSSH-SETUP.md`
- **SSH-Config**: `~/.ssh/config`
- **Service-Datei**: `~/.config/systemd/user/autossh-production.service`
- **Makefile**: `Makefile` (Befehle: `ssh`, `ssh-status`, `ssh-logs`, `setup-autossh`)

---

## Zusammenfassung

? Autossh erfolgreich installiert  
? SSH-Config mit Keep-Alive-Optionen erweitert  
? Systemd Service erstellt und konfiguriert  
? Service aktiviert und gestartet  
? Verbindungstest erfolgreich  
? Automatischer Neustart bei Verbindungsabbruch aktiviert  

Die SSH-Verbindung zum Production-Server wird jetzt automatisch ?berwacht und bei Abbruch neu aufgebaut.
