Codex verbindet sich über MCP (auf Englisch) mit deinen Servern: Füg einen einzigen Termalin-Server-Eintrag in den Abschnitt mcp_servers von ~/.codex/config.toml ein, und Codex führt Befehle aus und liest oder schreibt Dateien auf deinen Hosts – ohne je einen Schlüssel zu halten. Die Einrichtung dauert etwa zwanzig Minuten. (Willst du Codex nur auf einer Kiste, in die du dich ohnehin per SSH einloggst, erledigen das die Remote-Verbindungen der Codex-App selbst – mit deinem eigenen Schlüssel und dem Befehl codex, der auf dem entfernten Rechner installiert ist, ganz ohne MCP.)
Warum der MCP-Weg und nicht der naheliegende? Codex fühlt sich in einem Repo wohl. Die Aufgabe, die dich nach Server-Zugriff suchen lässt, ist die, die es verlässt – der Deploy ist gescheitert, die Migration hängt, der Dienst kommt auf der echten Kiste nicht wieder hoch. Die verlockende Lösung ist, Codex ssh selbst ausführen zu lassen: Es führt ohnehin schon Shell-Befehle auf deiner Maschine aus, wenn also ein entsperrter Schlüssel in ~/.ssh oder einem laufenden ssh-agent liegt, funktioniert ssh prod für es, ohne dass du irgendetwas entscheidest. Das ist nicht „Codex Zugriff geben“ – das ist die Entdeckung, dass du ihn standardmäßig aus der Hand gegeben hast.
Das hat dieselbe Form wie die Setups für Claude Code (auf Englisch) und Cursor; unten folgt die Codex-spezifische Version, Schritt für Schritt.
Warum Codex sagt, SSH sei in seiner Sandbox nicht erlaubt
Bitte Codex, sich per ssh auf eine Kiste zu verbinden, und meistens tut es das nicht: Der Befehl kommt blockiert zurück, oder Codex hält an und bittet um eine Freigabe, die ein unbeaufsichtigter Lauf nicht erteilen kann. Das ist so gewollt. Codex führt deine Befehle in einer Sandbox aus, in der Netzwerk- und Schreibzugriff abgeschottet sind – genau damit ein verwirrter oder eingeschleuster Agent nicht von sich aus deine Infrastruktur erreicht –, und eine ausgehende SSH-Verbindung ist genau die Art von Sache, die dieser Zaun verhindern soll.
Die Umgehungen, die herumgereicht werden, reißen den Zaun ein, statt mit ihm zu arbeiten:
- Bypass-Flags.
codex --dangerously-bypass-approvals-and-sandbox(und--full-auto) schalten die Sandbox ab, damitsshdurchgeht. Das Flag ist aber nicht auf SSH begrenzt – es lässt Freigaben und die Sandbox für jeden Befehl in diesem Lauf fallen. Du hast eine Sache freigeschaltet und die Leitplanke von allem anderen genommen. sshpass.sshpass -p 'hunter2' ssh user@hostübergibt ein Passwort nicht-interaktiv. Es schreibt das Passwort im Klartext in die Befehlszeile – sichtbar in der Prozessliste und im Shell-Verlauf – und bringt dem Agenten bei, eine Server-Zugangsberechtigung mit sich zu tragen, genau die Gewohnheit, die man vermeiden sollte.- Ein Schlüssel in der Sandbox.
~/.ssheinzuhängen oder einen Schlüssel in die Umgebung von Codex zu exportieren funktioniert, aber sobald der Schlüssel durch den Kontext des Agenten gelaufen ist, kannst du nicht mehr beweisen, dass er nicht geleakt ist; die Blast-Radius-Rangfolge (auf Englisch) setzt das aus gutem Grund ganz nach unten, und die einzige ehrliche Korrektur danach ist, den Schlüssel überall zu rotieren, wo ihm vertraut wird.
Alle drei beantworten „Wie bekomme ich SSH an der Sandbox vorbei“, während die bessere Frage lautet: „Wie führt der Agent einen Befehl auf meinem Server aus, ohne den Schlüssel zu halten oder die Sandbox fallen zu lassen.“ Das ist der MCP-Weg weiter unten. Termalin stellt die SSH-Verbindung her; Codex ruft ein Tool auf. Die Sandbox bleibt für alles andere, was Codex tut, aktiv, und weil session_open / session_exec eine dauerhafte Sitzung offen halten, bekommt der Agent eine echte Shell mit Zustand – ein cd, eine exportierte Variable, ein langlaufender Prozess überdauern alle die einzelnen Aufrufe – statt einer Reihe zusammenhangloser Einmal-Befehle.
Was du brauchst
- Termalin – die Desktop-App; der Free-Tarif reicht. Mit ihrem integrierten MCP-Server wird Codex sprechen.
- Die Codex-CLI, auf derselben Maschine.
- Ein Host, in Termalin gespeichert. Wähl etwas, bei dem es dir nichts ausmacht, wenn ein Agent beim ersten Lauf daran herumstochert – Staging, ein Wegwerf-VPS.
Schritt 1 – Agentenzugriff einschalten und eine Richtlinie setzen
Der Agentenzugriff ist standardmäßig aus. Öffne in Termalin Einstellungen → Agentenzugriff (MCP), schalte ihn ein und hake die Hosts ab, die Codex erreichen darf. Was nicht auf dieser Liste steht, existiert für den Agenten nicht; einen Host hinzuzufügen ist eine Entscheidung, die du in der App triffst, nichts, wozu Codex sich überreden kann.
Darunter passieren zwei Dinge. Termalin schreibt ein Host-Inventar für den MCP-Server mit reinen Agenten-Auth-Einträgen – keine Passwörter oder Schlüssel landen in dieser Datei. Und die Authentifizierung bleibt beim Schlüsselverwahrer der App: Du entsperrst einmal, und Termalin signiert für den Agenten. Es gibt keine Schlüsseldatei, die Codex lesen könnte, also gibt es nichts zu leaken – was auch die ~/.ssh-Hintertür von oben schließt.
Wenn du schon dabei bist, leg für jeden Host die Agenten-Richtlinie fest: voller Zugriff, eine Liste erlaubter Befehle oder gesperrt. Für alles, was dir wichtig ist, fang mit einer Liste erlaubter Befehle an – der kürzesten Liste, mit der Codex die Aufgabe erledigen kann, die du im Sinn hast.
Schritt 2 – den Server in config.toml eintragen
Codex liest MCP-Server aus dem Abschnitt mcp_servers von ~/.codex/config.toml. Füg einen Eintrag hinzu, der auf die mitgelieferte termalin-mcp-Binärdatei zeigt:
[mcp_servers.termalin]
command = "<path>/termalin-mcp"
Neuere Codex-Builds können ihn stattdessen über die Befehlszeile hinzufügen – mit demselben Ergebnis:
codex mcp add termalin -- <path>/termalin-mcp
Das ist die ganze Integration, und dieselbe Konfiguration steuert Codex in der IDE. Starte Codex neu, prüf, dass der Server als verbunden angezeigt wird, und die Tools erscheinen für den Agenten: hosts_list, ssh_exec, dauerhafte Sitzungen (session_open / session_exec), SFTP-Lese- und -Schreibzugriffe und Portweiterleitungen. Die vollständige Tool-Liste (auf Englisch) dokumentiert jedes einzelne.
Eine Codex-Gewohnheit, die man für die ersten Sitzungen beibehalten sollte: Lass seine Befehls-Freigaben an. Codex fragt, bevor es handelt, sofern du ihm nichts anderes sagst – sag ihm noch nichts anderes. Weite das so aus, wie du die Host-Liste ausweitest: eine langweilige Sache nach der anderen, nachdem du beobachtet hast, wie es sich verhält.
Schritt 3 – gib ihm eine echte Aufgabe
Lass den Demo-Befehl weg. Gib ihm etwas, das du wirklich tun würdest:
Der Deploy auf staging-1 ist durch, aber der Health-Check flattert. Finde heraus, warum, und behebe es.
Codex ruft hosts_list auf, sieht staging-1, öffnet eine Sitzung und beginnt, Fäden zu ziehen – Dienststatus, die letzten hundert Log-Zeilen, der Konfigurations-Diff gegen das, was läuft. Es schlägt eine Lösung vor, wendet sie im Rahmen der Richtlinie an, die du gesetzt hast, und bestätigt, dass der Check grün wird.
Der Grund, warum sich das angenehm anfühlt statt nervenaufreibend, ist, dass nichts davon unsichtbar ist. Jede Sitzung, die Codex öffnet, erscheint in Termalin als Live-Terminal-Tab, und das Watch Grid (auf Englisch) stellt alle offenen Sitzungen nebeneinander, wobei die vom Agenten gesteuerten Kacheln leuchten. Du siehst Befehle landen, während sie laufen, statt hinterher eine Zusammenfassung zu lesen – und du kannst jederzeit mitten in einer Sitzung einsteigen.
Wo die Grenzen liegen
Die Standardeinstellungen, die man kennen sollte, bevor man Codex auf etwas Wichtiges ansetzt:
- Deine Schlüssel gelangen nie in die Umgebung von Codex. Der Verwahrer signiert; der Agent fragt an. Den Zugriff zu widerrufen ist ein Schalter in den Einstellungen, keine Schlüsselrotation über deine Flotte hinweg.
- Seine Reichweite ist die Host-Liste, die du in Schritt 1 abgehakt hast, und die Befehlsrichtlinie jedes Hosts begrenzt, was es dort ausführen kann. „Voller Zugriff“ auf Produktion ist immer noch eine volle Shell – setz ihn bewusst.
- In deine Sitzung zu tippen ist etwas Separates. Standardmäßig öffnet Codex eigene Sitzungen; sich in eine einzuklinken, die du schon offen hast, ist ein eigener Zustimmungsschalter. Es fährt nie heimlich mit.
- Jeder Befehl ist aktenkundig. Sitzungsaufzeichnungen erfassen nur die Ausgabe – nie Tastenanschläge – und jeder Agenten-Befehl wird im Audit-Log als der des Agenten markiert (auf Englisch), mit dem Gerät und der IP, von der er kam. „Das hat der Agent gemacht“ ist ein Filter, den du anwendest, keine Geschichte, die du rekonstruierst.
Wenn Codex dort läuft, wo dein Desktop nicht ist
Läuft Codex in CI oder einer Cloud-Sandbox statt auf deinem Laptop, ist die lokale stdio-Binärdatei nicht erreichbar – wohl aber Termalins gehosteter MCP-Endpoint. Wo sich jemand anmelden kann, füg https://termal.in/mcp in Codex als entfernten MCP-Server hinzu und bestätige einmal auf Termalins Anmeldeseite (OAuth, kein Schlüssel zum Einfügen). Für unbeaufsichtigte Läufe erstell einen API-Schlüssel im Web-Kabinett, grenz ihn auf die Server ein, die dieser Job anfassen soll, setz ihn auf nur lesend oder eine Liste erlaubter Befehle und gib ihm ein Ablaufdatum. Der Endpoint erreicht deine über einen Connector angebundenen Server schlüssellos und authentifiziert jeden Lauf mit einem kurzlebigen Zertifikat – kein Schlüssel wird herausgegeben, nichts bleibt stehen. Das vollständige Muster, mit einem Copy-Paste-Pipeline-Beispiel, steht in einem Agenten SSH-Zugriff in CI/CD geben (auf Englisch).
Die Gewohnheit, die es dauerhaft macht
Behandle die erste Woche wie das Einarbeiten eines schnell tippenden Kollegen. Halt das Watch Grid offen. Gib Codex Aufgaben mit einem klaren Fertig-Zustand – „den Health-Check bestehen“, „das Zertifikat erneuern“ – und lies, wie es dahin kommt. Lass die Freigaben an, bis es sich die Auto-Freigabe für die langweiligen Tools verdient hat, und weite die Host-Liste eine unaufregende Kiste nach der anderen aus.
Die Asymmetrie ist der ganze Sinn: Codex bekommt echte Reichweite, und du behältst das Eine, das sich nicht zurückgeben lässt, wenn es einmal draußen ist.
Termalin ist ein plattformübergreifender SSH-Client mit integriertem MCP-Server, einem Schlüsselverwahrer und einer Agenten-Richtlinie pro Host. Starte mit der Codex-SSH-Seite, lies die MCP-Referenz oder lade die App herunter – der Free-Tarif hat kein Host-Limit.