# Mac-Steuerung und Fernsetup

Primärstrategie ab `1.2.0-r17`: Der Mac nutzt zuerst das gemeinsame Schul-WLAN
und erreicht den Mini-PC über `https://noah-robot.local` beziehungsweise
`https://10.1.0.136`. Das eigenständige `NOAH-ROBOT` bleibt ein mobiler
Fallback für Orte ohne vorhandenes WLAN.

Status: Der Mac erreichte den PELADN über `ssh noah-robot` und
`https://noah-robot.local/robot/`. Das WLAN `NOAH-ROBOT` ist auf dem Mac bereits
als bevorzugtes Netz gespeichert. Ein separates lokales Chrome-Profil hält die
widerrufbare Controller-Sitzung außerhalb des Repositories. Trackpad/Maus,
Pfeiltasten/WASD, Leertasten-STOP und sichere Sprachabsichten sind in Simulation
geprüft. Die vorbereiteten Apps und die CA liegen unter
`Desktop/mooc-ZEUG`. Reale Fahrt bleibt bis zum Hardware-Gate gesperrt.

## Vor-Ort-Ein-Klick-Start

`noahROBOT Schulstart.app`:

1. prüft im aktuellen WLAN `https://noah-robot.local/healthz`,
2. prüft als Wartungsfallback `https://10.1.0.136/healthz`,
3. wählt nur bei Nichterreichbarkeit das gespeicherte WLAN `NOAH-ROBOT`,
4. prüft dort `https://192.168.137.1/healthz`,
5. öffnet `noahROBOT Controller.app`.

Ist das SSID nicht erreichbar, öffnet die App die macOS-WLAN-Einstellungen und
verändert keine anderen gespeicherten WLAN-Profile.

## 1. Sichere Reihenfolge

1. PELADN mit Bildschirm/Tastatur starten und Windows normal anmelden.
2. IP-Adresse, Netzwerkprofil und OpenSSH-Server lokal lesend pruefen.
3. Erst einen einmaligen SSH-Login mit bestehender Methode testen.
4. Den tatsaechlich wirksamen `AuthorizedKeysFile`-Pfad aus der lokalen
   `C:\ProgramData\ssh\sshd_config` bestimmen; Dateiinhalt nicht in Logs kopieren.
5. Falls gewuenscht einen dedizierten Ed25519-Key nur fuer noahROBOT erzeugen.
6. Public Key kontrolliert an den ermittelten Pfad anhaengen und ACLs nach
   Microsoft-OpenSSH-Vorgabe setzen.
7. Key-Login in einem zweiten Terminal bestaetigen, bevor eine vorhandene
   Zugangsmethode geaendert wird. Der Bootstrap selbst deaktiviert kein Passwort.

## 2. Read-only Erreichbarkeit vom Mac

```bash
ssh -o BatchMode=yes -o ConnectTimeout=8 noah-robot hostname
curl --cacert noah-robot-root-ca.crt https://noah-robot.local/healthz
```

Ein Timeout wird nicht mit Firewall- oder SSH-Aenderungen aus der Ferne
beantwortet. Zuerst lokal pruefen, ob IP, WLAN und `sshd` stimmen.

## 3. Dedizierter Controller-Browser

Das Profil liegt lokal unter:

```text
~/Library/Application Support/noahROBOT Controller/ChromeProfile
```

Es enthält das lokale, widerrufbare Pairingtoken und darf nicht in Backups,
Repository oder Chat kopiert werden. Die Controller-App wird mit einer
SPKI-Bindung an den verifizierten lokalen HTTPS-Schlüssel gestartet; der
allgemeine macOS-Vertrauensspeicher bleibt unverändert.

Bedienung:

- Trackpad/Maus: Richtung gedrückt halten, loslassen = STOP
- Pfeiltasten oder WASD: Taste gedrückt halten, loslassen = STOP
- Leertaste: STOP
- Text/Sprache: Vorwärts, Rückwärts, Links, Rechts, langsamer, schneller, Stopp
- App-Wechsel, Fensterfokusverlust oder Netzverlust: STOP

Die Befehlssequenz wird pro gekoppeltem Gerät lokal fortgeführt. Ein
vollständiger Browser-Neustart und die anschließende Neuverbindung wurden live
geprüft.

Im Schulbetrieb bleibt der Mac im vorhandenen WLAN. Der Controller bleibt über
`https://noah-robot.local/robot/` gekoppelt; aktuell steht
`https://10.1.0.136/robot/` als direkter Fallback bereit. Im mobilen
NOAH-ROBOT-Modus ist `https://192.168.137.1/robot/` der Fallback. Beim WLAN-Wechsel,
Fokusverlust oder Socket-Abbruch gilt sofort STOP.

SSH ist im festgeschriebenen Roboternetz absichtlich nicht freigegeben. Wartung
erfolgt im Schul-WLAN; Pairing-PINs werden beim Handy-Setup lokal auf dem
Mini-PC in einen kurzlebigen QR-Code eingebettet.

## 4. Optionaler, dedizierter SSH-Key

Erst nach erfolgreichem interaktivem Zugang:

```bash
ssh-keygen -t ed25519 -a 64 -f ~/.ssh/noah_robot_windows -C noah-robot-admin
```

Der private Key bleibt auf dem Mac, bekommt Modus `0600` und wird niemals in
Repository, ZIP, Chat oder Diagnoseexport kopiert. Nur der `.pub`-Inhalt darf
auf Windows installiert werden. Fuer Administratorkonten kann OpenSSH einen
anderen zentralen Pfad als `%USERPROFILE%\.ssh\authorized_keys` verwenden;
deshalb darf der Pfad nicht geraten werden.

Beispiel fuer `~/.ssh/config` nach Bestaetigung:

```sshconfig
Host noah-robot-windows
    HostName 192.168.60.220
    User glanz.udo
    IdentityFile ~/.ssh/noah_robot_windows
    IdentitiesOnly yes
```

## 5. Inventar und Paket uebertragen

Auf Windows zuerst lokal im entpackten Release:

```powershell
.\scripts\windows\inventory.ps1 -OutputPath .\windows-inventory.json
.\scripts\windows\bootstrap-admin.ps1
```

Nach Pruefung des Trockenlaufs kann das Paket vom Mac kopiert werden:

```bash
scp robot/downloads/noahrobot-windows-1.2.0.zip noah-robot-windows:'C:/Users/glanz.udo/Downloads/'
```

Keine `.env`, `LocalSettings.php`, SSH-Keys oder MediaWiki-Secrets uebertragen.
Die eigentliche `-Apply`-Ausfuehrung erfolgt bevorzugt in einer sichtbaren
lokalen Admin-PowerShell mit UAC, nicht blind per SSH.

## 6. Fernstatus nach lokaler Installation

```bash
ssh noah-robot-windows 'powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\Program Files\noah-robot\current\scripts\windows\status.ps1"'
curl --fail --cacert noah-robot-ca.crt https://noah-robot.local/healthz
```

Das CA-Zertifikat wird separat exportiert; der Fingerabdruck wird ueber einen
zweiten Kanal verglichen. Private CA-Schluessel werden nie kopiert.

## 7. Rueckfall bei Netzproblemen

- keine vorhandene SSH-Sitzung schliessen, bevor der zweite Login funktioniert
- noahROBOT-Firewallregeln mit `uninstall.ps1` oder lokalem Windows-UI entfernen
- noahROBOT-Dienste mit `stop.ps1 -Apply` stoppen
- urspruengliche IP-/WLAN-Konfiguration lokal wiederherstellen
- bei Zweifeln Simulation offline weiterverwenden

Es werden keine automatischen Portweiterleitungen, Routeraenderungen oder
oeffentlichen Freigaben eingerichtet.
