# SSH Client

# SSH-Sitzung teilen, ohne Kennwort oder Schlüssel weiterzugeben

**Wofür:** Ein zweites Programm, ein Kollege am selben Rechner oder ein KI-Assistent soll auf einem Server arbeiten. Auf dem Server lässt sich aber kein öffentlicher Schlüssel hinterlegen (z. B. weil die Platte voll ist), und das Kennwort soll niemand sehen.

**Prinzip:** Du baust die Verbindung selbst auf und tippst das Kennwort nur in deinem eigenen Terminal. OpenSSH legt dabei eine Steuer-Datei (Socket) an. Weitere `ssh`-Aufrufe auf *demselben Rechner* benutzen diese offene Verbindung mit. Ein Kennwort oder ein Schlüssel ist dafür nicht nötig, und das Kennwort wird nirgends gespeichert.

## 1. Verbindung aufbauen (du selbst)

```
ssh -o ControlMaster=yes -o ControlPath=~/.ssh/cm-ZIEL -o ControlPersist=3h root@SERVER-IP
```

<table id="bkmrk-option-bedeutung-con"><tbody><tr><th>Option</th><th>Bedeutung</th></tr><tr><td>`ControlMaster=yes`</td><td>Diese Verbindung wird zur „Haupt“-Verbindung, an die sich andere anhängen dürfen.</td></tr><tr><td>`ControlPath=~/.ssh/cm-ZIEL`</td><td>Ort der Steuer-Datei. Wähle einen sprechenden Namen pro Ziel, z. B. `cm-pbs`.</td></tr><tr><td>`ControlPersist=3h`</td><td>Die Verbindung bleibt nach deinem Abmelden noch 3 Stunden offen.</td></tr></tbody></table>

Das Kennwort tippst du in dieses Terminal. Danach kannst du normal weiterarbeiten oder die Sitzung schließen. Die Verbindung im Hintergrund bleibt bis zum Ablauf von `ControlPersist` bestehen.

<div class="hinweis" id="bkmrk-wichtig%3A-wenn-du-dic">**Wichtig:** Wenn du dich vorher schon mit normalem `ssh` angemeldet hast, kann sich niemand an diese Sitzung hängen. Sie hat keine Steuer-Datei. Öffne deshalb ein zweites Terminal und baue die Verbindung mit dem Befehl oben neu auf.</div>## 2. Die geteilte Verbindung benutzen (der Helfer)

```
ssh -o ControlPath=~/.ssh/cm-ZIEL root@SERVER-IP 'hostname; df -h /'
```

Damit nichts hängen bleibt, wenn die Verbindung schon zu ist, empfiehlt sich zusätzlich `-o BatchMode=yes`. Dann fragt SSH nicht nach einem Kennwort, sondern meldet sofort einen Fehler.

## 3. Kontrolle und Beenden

```
# Läuft die Verbindung noch?
ssh -O check -o ControlPath=~/.ssh/cm-ZIEL root@SERVER-IP

# Sofort schließen (für alle, die sie mitbenutzen)
ssh -O exit -o ControlPath=~/.ssh/cm-ZIEL root@SERVER-IP
```

## Sicherheit

- Wer die Steuer-Datei benutzen kann, arbeitet mit **deinen Rechten** auf dem Server. Sie liegt in `~/.ssh/` und gehört nur deinem Benutzer. Andere lokale Benutzer kommen also nicht ran, root auf deinem Rechner aber schon.
- Teile die Verbindung nur so lange wie nötig. Halte `ControlPersist` kurz und beende die Verbindung danach mit `-O exit`.
- Auf Kundensystemen: Kläre vorher, was der Helfer tun darf. Nur lesen ist der sichere Standard, Änderungen nur nach Rückfrage.
- Die Steuer-Datei wirkt nur auf dem Rechner, auf dem sie liegt. Ein entfernter Zugriff ist darüber nicht möglich.

## Fehlerbilder

<table id="bkmrk-meldung-ursache-perm"><tbody><tr><th>Meldung</th><th>Ursache</th></tr><tr><td>`Permission denied (publickey,password)`</td><td>Es existiert keine Steuer-Datei. Die Verbindung wurde ohne `ControlMaster=yes` aufgebaut, ist abgelaufen oder läuft auf einem anderen Rechner.</td></tr><tr><td>`Control socket connect(...): No such file or directory`</td><td>Der Pfad stimmt nicht oder die Verbindung ist schon geschlossen.</td></tr></tbody></table>