# SSH Makefile-Befehle

**Datum**: 2025-11-02  
**Status**: ? Verf?gbar  
**Zweck**: Einfache SSH-Verbindungen ?ber Makefile-Befehle

---

## ?bersicht

Das Projekt bietet Makefile-Befehle f?r SSH-Verbindungen zum Production- und Git-Server. Diese nutzen die konfigurierte SSH-Config (`~/.ssh/config`) und autossh f?r persistente Verbindungen.

---

## Verf?gbare Befehle

### `make ssh` oder `make ssh-production`

?ffnet eine SSH-Verbindung zum Production-Server.

```bash
make ssh
```

**Was passiert:**
- Nutzt die SSH-Config (`~/.ssh/config`) mit dem `production` Host
- Verbindet zu `94.16.110.151` als User `deploy`
- Nutzt den SSH-Schl?ssel `~/.ssh/production`
- Keep-Alive aktiviert (ServerAliveInterval 60)

**Beispiel:**
```bash
$ make ssh
?? Verbinde zum Production-Server...
Welcome to Ubuntu...
deploy@production:~$ 
```

---

### `make ssh-git`

?ffnet eine SSH-Verbindung zum Git-Server.

```bash
make ssh-git
```

**Was passiert:**
- Nutzt die SSH-Config mit dem `git.michaelschiemer.de` Host
- Verbindet zu `git.michaelschiemer.de` Port 2222 als User `git`
- Nutzt den SSH-Schl?ssel `~/.ssh/git_michaelschiemer`

---

### `make ssh-status`

Pr?ft den Status der autossh-Services.

```bash
make ssh-status
```

**Ausgabe:**
```bash
?? Pr?fe autossh 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.8M

michael  35533  0.0  0.0   2484  1536 ?        Ss   18:21   0:00 /usr/lib/autossh/autossh -M 20000 -N -o ServerAliveInterval=60 -o ServerAliveCountMax=3 production
```

---

### `make ssh-logs`

Zeigt die Logs der autossh-Services an.

```bash
make ssh-logs
```

**Ausgabe:**
```bash
?? Zeige autossh Logs...
Nov 02 18:21:06 Mike-PC systemd[19787]: Started autossh-production.service - AutoSSH for production.
Nov 02 18:21:06 Mike-PC autossh[35533]: short poll time: adjusting net timeouts to 5000
Nov 02 18:21:06 Mike-PC autossh[35533]: starting ssh (count 1)
Nov 02 18:21:06 Mike-PC autossh[35533]: ssh child pid is 35537
```

**F?r Live-Logs:**
```bash
journalctl --user -u autossh-production.service -f
```

---

### `make setup-autossh`

Richtet autossh f?r persistente SSH-Verbindungen ein.

```bash
make setup-autossh
```

**Was passiert:**
- F?hrt das Setup-Script aus (`scripts/setup-autossh.sh both`)
- Erweitert SSH-Config mit Keep-Alive-Optionen
- Erstellt systemd Services f?r Production- und Git-Server
- Testet SSH-Verbindungen

**Siehe auch:** `docs/deployment/AUTOSSH-SETUP.md`

---

## SSH-Config

Die Makefile-Befehle nutzen die SSH-Config (`~/.ssh/config`):

### Production-Server

```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
```

### Git-Server

```ssh-config
Host git.michaelschiemer.de
    HostName git.michaelschiemer.de
    Port 2222
    User git
    IdentityFile ~/.ssh/git_michaelschiemer
    ServerAliveInterval 60
    ServerAliveCountMax 3
    TCPKeepAlive yes
    Compression yes
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
```

---

## Erweiterte Nutzung

### SSH mit zus?tzlichen Befehlen

Du kannst auch direkt `ssh` mit zus?tzlichen Befehlen verwenden:

```bash
# Remote-Befehl ausf?hren
ssh production "docker ps"

# SSH-Tunnel erstellen
ssh production -L 8080:localhost:80 -N

# Datei kopieren (SCP)
scp production:/path/to/file ./local-file

# Datei hochladen
scp ./local-file production:/path/to/file
```

### Mit dem Production-Server arbeiten

```bash
# Docker-Container Status pr?fen
make ssh
# Dann im SSH:
docker ps
cd /var/www/html && docker compose ps

# Logs anzeigen
cd ~/deployment/stacks/application && docker compose logs -f
```

---

## Troubleshooting

### SSH-Verbindung schl?gt fehl

**Problem**: `make ssh` verbindet nicht

**L?sung**:
1. Pr?fe SSH-Config:
   ```bash
   cat ~/.ssh/config | grep -A 10 "Host production"
   ```

2. Teste Verbindung manuell:
   ```bash
   ssh -v production
   ```

3. Pr?fe SSH-Schl?ssel:
   ```bash
   ls -la ~/.ssh/production
   ```

4. Teste mit IP-Adresse:
   ```bash
   ssh -i ~/.ssh/production deploy@94.16.110.151
   ```

### Autossh l?uft nicht

**Problem**: `make ssh-status` zeigt Service als inaktiv

**L?sung**:
1. Service starten:
   ```bash
   systemctl --user start autossh-production.service
   ```

2. Service aktivieren:
   ```bash
   systemctl --user enable autossh-production.service
   ```

3. Autossh neu einrichten:
   ```bash
   make setup-autossh
   ```

### Verbindung bricht regelm??ig ab

**Problem**: SSH-Verbindung bricht auch mit autossh ab

**L?sung**:
1. Pr?fe autossh Status:
   ```bash
   make ssh-status
   ```

2. Pr?fe Logs:
   ```bash
   make ssh-logs
   ```

3. Teste Keep-Alive:
   ```bash
   ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=10 production
   ```

---

## Weitere SSH-Befehle im Makefile

Es gibt weitere SSH-bezogene Befehle im Makefile:

```bash
# Production-Container neu starten
make restart-production

# Production-Logs anzeigen
make logs-production
make logs-staging

# Production-Status pr?fen
make status-production
```

**Siehe auch:** `make help` f?r alle verf?gbaren Befehle

---

## Best Practices

1. **Nutze `make ssh` statt direkter SSH-Befehle**:  
   Dies stellt sicher, dass die korrekte Konfiguration verwendet wird.

2. **Pr?fe regelm??ig den autossh-Status**:  
   ```bash
   make ssh-status
   ```

3. **Nutze SSH-Config statt direkter IPs**:  
   Nutze `ssh production` statt `ssh deploy@94.16.110.151`

4. **Pr?fe Logs bei Problemen**:  
   ```bash
   make ssh-logs
   ```

---

## Referenzen

- **Autossh Setup**: `docs/deployment/AUTOSSH-SETUP.md`
- **Autossh Setup Abgeschlossen**: `docs/deployment/AUTOSSH-SETUP-COMPLETED.md`
- **Setup-Script**: `scripts/setup-autossh.sh`
- **SSH-Config**: `~/.ssh/config`
- **Makefile**: `Makefile`

---

## Zusammenfassung

? Makefile-Befehle f?r SSH-Verbindungen verf?gbar  
? Einfache Verbindung zum Production-Server: `make ssh`  
? Service-Status pr?fen: `make ssh-status`  
? Logs anzeigen: `make ssh-logs`  
? Autossh einrichten: `make setup-autossh`  

Alle Befehle nutzen die konfigurierte SSH-Config und autossh f?r persistente Verbindungen.
