Codex は MCP(英語)を通してサーバーに接続します。~/.codex/config.toml の mcp_servers セクションに Termalin のサーバーエントリを 1 つ追加すれば、Codex はあなたのホストでコマンドを実行し、ファイルを読み書きします——鍵を持つことは一切ありません。設定は 20 分ほどです。(すでに SSH しているマシン 1 台でだけ Codex を使いたいなら、Codex アプリ自身のリモート接続が、あなた自身の鍵と、リモート側にインストールした codex コマンドでそれを実現します——MCP は不要です。)
なぜ、わかりやすい方法ではなく MCP の経路なのか。Codex はリポジトリの中では快適に動きます。サーバーアクセスを探しに行かせるタスクとは、そのリポジトリを離れるものです——デプロイが失敗した、マイグレーションが止まった、サービスが実機の上で復帰しない、といった場面です。手を出したくなる対処は、Codex 自身に ssh を実行させることです。Codex はすでにあなたのマシンでシェルコマンドを実行するので、鍵が ~/.ssh やアンロック済みの ssh-agent に置いてあると、あなたが何も決めていないのに ssh prod が動いてしまいます。これは「Codex にアクセスを与える」ことではありません——既定でアクセスを渡してしまっていたと気づく、ということです。
これは Claude Code(英語)や Cursor のセットアップと同じ形です。以下は、その Codex 固有の版を、順を追って説明します。
Codex が「SSH はサンドボックスで許可されていない」と言う理由
Codex に ssh でマシンに入るよう頼んでも、たいていは実行しません。コマンドがブロックされて返ってくるか、Codex が、無人の実行では与えられない承認を求めて止まります。これは設計どおりの動作です。Codex はあなたのコマンドを、ネットワークと書き込みのアクセスを遮断したサンドボックスの中で実行します。これはまさに、混乱したり注入されたりしたエージェントが、自分からあなたのインフラに手を伸ばせないようにするためです——そして外向きの SSH 接続こそ、その囲いが止めるために存在する類のものです。
出回っている回避策は、その囲いとうまく付き合うのではなく、囲いそのものを取り払うものばかりです。
- バイパスフラグ。
codex --dangerously-bypass-approvals-and-sandbox(と--full-auto)はサンドボックスをオフにするので、sshが通ります。ですがこのフラグは SSH に限定されません——その実行におけるすべてのコマンドについて、承認とサンドボックスを外します。1 つのものを通すために、全部のガードレールを外してしまったのです。 sshpass。sshpass -p 'hunter2' ssh user@hostは、パスワードを非対話的に渡します。パスワードを平文でコマンドラインに置くことになり——プロセス一覧やシェル履歴に残ります——しかも、サーバーの資格情報を持ち歩く習慣をエージェントに教え込みます。まさに避けるべき習慣です。- サンドボックス内の鍵。
~/.sshをマウントするか、鍵を Codex の環境にエクスポートすれば動きますが、いったん鍵がエージェントのコンテキストを通ってしまうと、漏れていないことを証明できません。被害範囲のランキング(英語)がこれを最下位に置くのには理由があり、そのあとの唯一の誠実な対処は、その鍵が信頼されているすべての場所でローテーションすることです。
この 3 つはいずれも「SSH をどうやってサンドボックスの先へ通すか」に答えていますが、より良い問いは「鍵を持たず、サンドボックスも外さずに、エージェントはどうやってサーバーでコマンドを実行するか」です。それが、以下の MCP の経路です。SSH 接続を行うのは Termalin で、Codex はツールを呼ぶだけです。Codex が行う他のすべてについてはサンドボックスがオンのままで、しかも session_open / session_exec が永続的なセッションを保つので、エージェントは状態を持つ本物のシェルを手にします——cd、エクスポートした変数、長時間動くプロセスが、呼び出しをまたいで生き残ります——切り離された単発のコマンドの連なり、ではなく。
必要なもの
- Termalin——デスクトップアプリで、Free プランで十分です。MCP サーバーを内蔵しており、Codex が話す相手はこのサーバーです。
- 同じマシン上の Codex CLI。
- Termalin に保存したホストを 1 つ。最初の実行には、エージェントにつつかれても構わないものを選びます——ステージング、使い捨ての VPS など。
ステップ 1:エージェントアクセスを有効化し、ポリシーを設定する
エージェントアクセスは既定でオフです。Termalin で **設定 →「エージェントアクセス (MCP)」**を開いて有効化し、Codex が到達してよいホストにチェックを入れます。そのリストの外にあるものは、エージェントから見れば存在しません。新しいホストを足すのは、アプリであなたが下す決定であって、Codex が口車で入り込めるものではありません。
裏では 2 つのことが起きます。Termalin は MCP サーバー向けにホストのインベントリを書き出しますが、そこにあるのはエージェント専用の認証エントリだけで、パスワードや鍵はそのファイルに着地しません。そして認証はアプリの鍵カストディアン(あなたの代わりに鍵を預かり、署名する仕組み)が受け持ちます。あなたが一度アンロックすれば、Termalin がエージェントの代わりに署名します。Codex が読める鍵ファイルは存在しないので、漏らすものもありません——これは上の ~/.ssh という裏口も閉じます。
設定にいるあいだに、各ホストのエージェントポリシーを設定します。フルアクセス、コマンドの許可リスト、またはブロックです。大切に思うものには、許可リストから始めてください——Codex に任せたい仕事をこなせる、最短のリストです。
ステップ 2:config.toml にサーバーを登録する
Codex は MCP サーバーを ~/.codex/config.toml の mcp_servers セクションから読み込みます。付属の termalin-mcp バイナリを指すエントリを 1 つ追加します:
[mcp_servers.termalin]
command = "<path>/termalin-mcp"
最近の Codex のビルドなら、代わりにコマンドラインから追加できます——結果は同じです:
codex mcp add termalin -- <path>/termalin-mcp
これで連携は完了で、同じ設定が IDE 内の Codex も動かします。Codex を再起動し、サーバーが接続済みと表示されることを確認すると、エージェントにツールが現れます。hosts_list、ssh_exec、永続的なセッション(session_open / session_exec)、SFTP の読み書き、そしてポート転送です。ツールの一覧(英語)に、その一つひとつが載っています。
最初の数セッションのあいだ保っておく価値のある Codex の習慣が 1 つあります。コマンドの承認をオンのままにすることです。Codex は、あなたが「もういい」と言わない限り、動く前に確認します——まだ言わないでください。それを広げるのは、ホストのリストを広げるときと同じやり方で。退屈なものから 1 つずつ、エージェントの振る舞いを見届けてから、です。
ステップ 3:本物の雑務を任せる
デモ用のコマンドは飛ばしてください。実際にやるであろうことを任せます:
staging-1 へのデプロイは終わったのに、ヘルスチェックがばたついている。原因を突き止めて直して。
Codex は hosts_list を呼び、staging-1 を見つけ、セッションを開いて、糸をたぐり始めます——サービスの状態、直近 100 行のログ、稼働中のものとの設定差分です。修正を提案し、あなたが設定したポリシーの範囲内で適用し、チェックが緑になることを確認します。
これが、気が張るのではなく心地よいのは、その何一つ見えないものがないからです。Codex が開く各セッションは、Termalin にライブのターミナルタブとして現れ、**ウォッチグリッド(英語)**は、開いているすべてのセッションを並べ、エージェントが動かしているタイルを光らせます。事後のまとめを読んでいるのではなく、コマンドが実行されて着地する様子をそのまま見ていて、いつでもセッションの途中で割って入れます。
どこに境界があるか
大切なものに Codex を向ける前に知っておく価値のある既定値です:
- 鍵が Codex の環境に入ることは決してありません。 カストディアンが署名し、エージェントは依頼します。アクセスの取り消しは設定内のトグルであって、サーバー群全体にわたる鍵のローテーションではありません。
- 到達範囲は、ステップ 1 でチェックしたホストのリストで、各ホストのコマンドポリシーが、そこで何を実行できるかの上限を定めます。本番で「フル」は、やはりフルのシェルです——意図して設定してください。
- あなたのセッションへの入力は別扱いです。 既定では Codex は自分のセッションを開きます。すでに開いているセッションに加わることは、それ専用の同意トグルで、こっそり相乗りすることは決してありません。
- すべてのコマンドが記録に残ります。 セッション録画は出力のみを記録し——キー入力は決して記録しません——各エージェントのコマンドは、発信元のデバイスと IP とともに、監査ログでエージェントのものとしてタグ付け(英語)されます。「これはエージェントがやった」は、あなたが適用するフィルターであって、組み立て直すストーリーではありません。
Codex がデスクトップのない場所で動くとき
Codex がノート PC ではなく、CI やクラウドのサンドボックスで動いている場合、ローカルの stdio バイナリには届きません——ですが Termalin のホスト型 MCP エンドポイントには届きます。サインインできる場所なら、https://termal.in/mcp をリモートの MCP サーバーとして Codex に追加し、Termalin のサインインページで一度承認します(OAuth、貼り付ける鍵はありません)。無人の実行なら、ウェブキャビネットで API キーを作成し、そのジョブが触れるべきサーバーにスコープを絞り、読み取り専用または許可リストに設定し、有効期限を付けます。エンドポイントは、Connector で登録したサーバーにキーレスで到達し、各実行を短期証明書で認証します——配られる鍵も、常駐するものもありません。コピー&ペーストで使えるパイプラインの例を含む全体像は、CI/CD でエージェントに SSH アクセスを与える(英語)にあります。
定着させる習慣
最初の 1 週間は、とても速くタイプする新しいチームメイトを迎え入れるように扱ってください。ウォッチグリッドは開いたままにします。完了状態がはっきりした雑務を Codex に与え——「ヘルスチェックを通す」「証明書を更新する」——そこへどうたどり着くかを読みます。退屈なツールで自動承認を勝ち取るまでは承認をオンのままにし、ホストのリストは、面白みのないマシンから 1 台ずつ広げていきます。
肝はこの非対称性です。Codex は本物の到達範囲を得て、あなたは、いったん外に出たら取り返せない唯一のものを手元に持ち続けます。
Termalin は、MCP サーバー、鍵カストディアン、ホストごとのエージェントポリシーを内蔵したクロスプラットフォームの SSH クライアントです。Codex SSH ページから始めるか、MCP リファレンスを読むか、アプリをダウンロードしてください——Free プランにホスト数の制限はありません。