InfraGuard

対話型 SSH PTY ターミナル

ブラウザー上で動く本物のシェル(top / vi / sudo も使えます)。xterm.js ⇄ WebSocket ⇄ Node の ssh2 ブリッジ ⇄ リモートの sshd。

概要 — 何をする仕組みか

インスタンスカードの [ssh] アクションは、ブラウザー上に本物の対話型ターミナルを開きます。これは PTY コンソール です。xterm.js ⇄ WebSocket ⇄ Node のブリッジ(scripts/infr_ssh_bridge.cjs、ssh2 を使用) ⇄ リモートの sshd という構成です。ssh2 がリモート側に PTY を割り当てるため、top・vi・sudo・less のような対話型プログラムも動作します(tty = /dev/pts であることを実測で確認済み)。

これは Reverb ではありません(pub/sub は PTY ストリームに向きません)。また node-pty でもありません(ssh2 は純粋な JavaScript で、クロスプラットフォームかつローカル PTY を必要としません)。

使い方

認証は2段階です。

  1. Laravel の /asset/instances/ssh/session が 署名付きチケット を発行します(レベル2以上 · 有効期間20秒 · 監査対象)。
  2. ブリッジがそのチケットを検証します。password 認証のインスタンスでは、ブラウザーが最初の WS フレームでパスワードを中継します(保存はしません)。key 認証のインスタンスでは、ブリッジが保存済みの秘密鍵(Crypt)または ~/.ssh/エージェントを使用します。
xterm.js  ⇄  WebSocket  ⇄  ssh2 bridge  ⇄  remote sshd (PTY)

データソース

アクセス権限

レベル2以上 + 監査。本番環境では、ブリッジは wss + ホスト鍵ピンニングを有効にして監視下で稼働します。

関連項目

카드의 [ssh] 버튼
카드의 [ssh] 버튼