概要 — 何をする仕組みか
インスタンスカードの [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段階です。
- Laravel の
/asset/instances/ssh/sessionが 署名付きチケット を発行します(レベル2以上 · 有効期間20秒 · 監査対象)。 - ブリッジがそのチケットを検証します。password 認証のインスタンスでは、ブラウザーが最初の WS フレームでパスワードを中継します(保存はしません)。key 認証のインスタンスでは、ブリッジが保存済みの秘密鍵(Crypt)または
~/.ssh/エージェントを使用します。
xterm.js ⇄ WebSocket ⇄ ssh2 bridge ⇄ remote sshd (PTY)
データソース
- 任意で保存される鍵:
infr_instance.ssh_key_enc(Crypt。外部に出るのはhas_ssh_keyの真偽値のみ)
アクセス権限
レベル2以上 + 監査。本番環境では、ブリッジは wss + ホスト鍵ピンニングを有効にして監視下で稼働します。
関連項目
![카드의 [ssh] 버튼](/manual-shots/ko/instance-card.webp)