NetStacks:思考するAI搭載オープンソースSSHターミナル

Dev.to / 2026/5/7

💬 オピニオンDeveloper Stack & InfrastructureTools & Practical UsageIndustry & Market Moves

要点

  • NetStacksはネットワークエンジニア向けに作られたオープンソースのデスクトップ端末で、SSH・Telnet・SFTPに加え、タブ、ペイン分割、グループ化、複数セッションへのコマンド同時送信といったセッション管理機能を備えています。
  • 汎用ターミナルの限界に対処するため、ネットワーク文脈を取り込み、よくあるCLI出力の解釈を助けることで、危険な操作のリスク低減につなげます。
  • 暗号化されたクレデンシャル・ボールトにより、多数のデバイス資格情報やアクセス用トークンを安全に保管・管理し、プレーンテキストや汎用パスワードマネージャの問題に対処します。
  • さらにAI支援、Jinja2の設定テンプレート、トポロジー可視化、NetBox/LibreNMS/Netdiscoなどとの連携を組み合わせ、日々の運用を効率化します。
  • 記事ではAI機能の仕組みや、その取り組みをオープンソースで行う意義について説明しています。


ほとんどのネットワークエンジニアが毎日のツールとして同じようなものを使っています。汎用の端末エミュレータ、パスワードマネージャ、ベンダーのドキュメントを見るためのブラウザのタブ、デバイスIPのスプレッドシート、そしてトポロジ図を描くための図形ツールがあるかもしれません。どのツールもそれ自体は問題ありません。しかし、それらは筋肉の記憶とAlt-Tabによってつなぎ合わされたワークフローを作り出します。

NetStacksはネットワークエンジニアリング専用に設計されたオープンソースのデスクトップターミナルです。SSH、Telnet、SFTPセッションを、暗号化された認証情報ボールト、ネットワークを意識したAIアシスタント、Jinja2の設定テンプレート、トポロジの可視化、そしてNetBox、LibreNMS、Netdiscoのようなツールとの統合と組み合わせ、すべてを1つのアプリケーションにまとめています。

この投稿では、NetStacksができること、AI機能がどのように動くか、そしてなぜオープンソースなのかを説明します。

一般用途のターミナルにまつわる問題

PuTTY、SecureCRT、iTerm2、Windows Terminalはいずれも堅実なツールです。しかし、それらはネットワークについて何も知りません。show ip bgp summary の出力をターミナルに貼り付けると、ターミナルは単にテキストとして認識します。State/PfxRcd列で Active が表示されていることが、BGPピアが確立に失敗したことを意味するとは理解していません。permit ステートメントがないルートマップが暗黙のdeny-all(拒否の全部)であることも教えてくれません。さらに、生産環境のルータに write erase を貼り付けようとしていることを警告してくれることもありません。

ネットワークエンジニアは、何十台(場合によっては何百台)ものデバイスに対する認証情報も蓄積していきます。SSHキー、パスワード、SNMPのコミュニティ文字列、APIトークンです。これらはセッションプロファイルを理解しないパスワードマネージャに保存されるか、さらに悪いことに、平文のファイルやシェルの履歴の中に保存されていることもあります。

NetStacksはこれらのギャップを埋めるために作られました。つまり、利用するプロトコルを理解するターミナル、認証情報を安全に保存する仕組み、そしてネットワークエンジニアが毎日行っているドメイン固有の作業を実際に手助けするためのAIの活用です。

NetStacksができること

セッション管理を備えたマルチプロトコル・ターミナル

NetStacksの中核は、SSH、Telnet、SFTPをサポートするタブ付きターミナルエミュレータです。ペインを水平・垂直に分割したり、サイトや機能ごとにタブをグループ化したり、複数のセッションにまたがって同時にコマンドをブロードキャストしたりできます。これは、ラック内のすべてのスイッチに設定変更を展開する場面や、複数台に対して show version を実行する場面で役立ちます。

セッションはフォルダ、タグ、スマートフィルタで整理されます。SecureCRTから移行する場合は、既存のセッションデータベースを直接インポートできます。さらに、CSVからデバイスを一括インポートしたり、インベントリをNetBoxからそのまま同期したりも可能です。

ネットワーク作業で重要になるその他の端末機能:

  • 設定可能な構文ハイライト — インターフェースの状態、エラーカウンタ、BGPの状態など、気になるパターンを色分け
  • スニペットとカスタムコマンド — 変数の置換を伴う、再利用できるコマンドブロック。1回入力すればどこでも適用できます
  • ジャンプホストとトンネル対応 — ProxyJumpチェーン、ローカルポートフォワード、ダイナミックなSOCKSプロキシングを、セッションごとに設定可能
  • セッション記録 — コマンド索引付きの端末録画、検索可能な履歴、コンプライアンスやトレーニングのためのテキスト・トランスクリプト
  • ライブセッション共有 — 端末セッションをチームメイトと共有し、リアルタイムで共同トラブルシューティング
  • ファインドバーとコマンドパレット — 端末出力内を検索し、キーボードから任意のアクションにアクセス
  • SFTPファイルブラウザ — 端末セッションと統合され、進捗追跡付きでファイルのドラッグ&ドロップ転送を可能に

暗号化された認証情報ボールト

NetStacksには、SSHパスワード、プライベートキー、APIトークン、SNMPコミュニティ文字列のためのローカル認証情報ボールトが含まれています。認証情報はマスターパスワードから導出した鍵を使って、保存時に暗号化されます。暗号プリミティブは別のオープンソースライブラリ(netstacks-crypto)として公開されており、独立して監査できるようにしています。

ボールトに関する重要ポイント:

  • すべてローカルに保たれます。クラウド同期も、サードパーティの鍵管理サービスもありません。
  • 認証情報はセッションプロファイルに紐づけられるため、デバイスへの接続時に認証が自動で補完され、別のパスワードマネージャからコピペする必要がありません。
  • ボールトはmacOS(Touch ID)とWindows(Windows Hello)での生体ロック解除に対応し、利便性のために提供されます(ただし最初のロック解除時にマスターパスワード要件を犠牲にすることはありません)。
  • 永続化されるすべての状態—セッション、認証情報、トポロジ、履歴—は単一のSQLiteデータベースファイルに保存されます。NetStacksのバックアップとは、その1ファイルのバックアップを意味します。

ネットワークを意識したAIアシスタント

この機能こそが、NetStacksを「AIチャットボットを後付けしただけの汎用ターミナル」と切り分けています。

AIアシスタントには、Cisco IOS/IOS-XE/NX-OS、Juniper JunOS、Arista EOS向けのベンダー固有のナレッジパックが同梱されています。これらは汎用のプロンプトテンプレートではありません。プラットフォーム固有の運用知識をエンコードしています。Ciscoパックは、NX-OSが機能ゲートされている(OSPFを設定する前に feature ospf が必要)ことを知っています。Juniperパックは、コミットモデルとロールバックのワークフローを知っています。ルーティングパックは、BGPのパス選択順序、OSPFのLSAタイプ、EIGRPの実現可能性条件(feasibility conditions)を理解しています。

アシスタントが実際にできること:

  • 端末出力を読み取り、何が起きているかを説明。BGPネイバーテーブルを貼り付ければ、確立しているピア、Activeで固まっているピアを特定し、現在使用しているプラットフォームに固有のトラブルシューティング手順を提案します。
  • コマンドの提案 — デバイスの種類、セッションの状況、そして達成したいことに基づいて提案します。show ip route はIOSで、show route はJunOSで、という違いも理解しています。
  • 設定スニペットの生成 — 対象プラットフォームに適した正しい構文で生成し、よくある落とし穴(例:permit ステートメントなしのCiscoルートマップでは暗黙のdenyが発生する)も含めます。
  • トラブルシューティングの支援 — 隣接状態の確認、ネクストホップ到達性の検証、パス選択の分析など、診断ワークフローを順を追って案内します。

(設計上)やらないこと:

NetStacksは、すべてのAIとのやり取りにハードコードされた、譲れない安全ルールのセットを強制します。

  • ユーザーによる明示的な承認なしに破壊的なコマンド(write erasereloadrequest system zeroize)を実行することはありません。
  • CLIの出力を捏造したり、インターフェース名を作り出したりすることはありません。プラットフォームに対する正確な構文が分からない場合は、その旨を伝えます。
  • 変更管理や承認ワークフローを迂回することはありません。
  • 実行後に変更を検証し、検証に失敗した場合は直ちに報告します。
  • ログ、監査トレイル、セッション記録の中で常に「AIであること」を明示します。

認証情報のサニタイズ:

端末の出力やコンテキストがAIモデルに渡される前に、設定可能なサニタイズ層を通します。この層は以下をマスクできます。

  • IPv4およびIPv6アドレス
  • MACアドレス
  • ホスト名およびFQDN
  • 設定コンテキスト内のユーザー名
  • SNMPコミュニティ、パスワード、APIキー(常に秘匿化:設定不可)
  • 正規表現で定義するカスタムパターン
  • スクラブされる内容はあなたが制御します。LLMプロバイダにIPアドレスを送ることには問題がないがホスト名は送りたくない、という場合は、そのように設定してください。資格情報(クレデンシャル)は常に削除されます — これは任意ではありません。

    自分のモデルを持ち込む:

    NetStacksはLLMプロバイダとしてOpenAI、Anthropic、Ollamaをサポートしています。Ollamaでセルフホストのモデルを実行する場合、ネットワークの外へ何も出ていきません。さらに、Model Context Protocol(MCP)を介して外部ツールサーバーに接続することで、AIエージェントが実行できることを拡張できます。

    NOC Agents

    インタラクティブなチャットアシスタントに加えて、NetStacksには自律型のNOC(Network Operations Center)エージェントが含まれます。このエージェントはReActパターンを用いてネットワークイベントを監視し、トリアージし、応答できます。エージェントは、設定可能な自律性のレベルとツール承認のワークフローで動作します。つまり、デバイスの状態を変更するような操作を提案し、人の承認を得るまで実行しません。

    これは、障害時の自動トリアージのようなシナリオを想定しています。エージェントはアラートに気づき、影響を受けたデバイスから関連するshowコマンドの出力を収集し、データを相関付けて、提案する復旧手順とともに診断を提示します — すべて、人がキーボードに触れる前に。

    Jinja2による構成テンプレート

    NetStacksには、デバイス構成を生成するための完全なJinja2テンプレートエンジンが含まれています。変数、条件分岐、ループ、マクロを使ってテンプレートを作成します。システムはテンプレート内の変数を自動的に検出し、手動入力、デバイスインベントリデータ、またはAPIソースからそれらを取り込めます。

    テンプレートはイミュータブル履歴付きでバージョン管理されており、バージョン間の差分比較やロールバック機能も備えています。ドキュメントには、Cisco IOS、NX-OS、Juniper JunOS、Arista EOSに対応した、一般的な構成(VLAN、ACL、BGPピアリング、OSPFエリア、インターフェース構成)のためのすぐに使える例が含まれています。

    レンダリング済みの構成をプレビューし、構文バリデーションを実行し、デバイスへ投入する前にドライランで比較できます。

    手順(MOPs: Methods of Procedure)

    変更管理のために、NetStacksは、リスク分類、ロールバック手順、プラットフォームのガイダンス、マルチ承認者によるワークフローを備えた構造化された手順(MOPs)をサポートします。各手順について、ステップ、承認のしきい値、そしてAIの自律性レベルを定義します。承認者は、実行が始まる前に内容を確認し、コメントし、承認または却下できます。

    これは、通常は別のチケット管理システムやWordドキュメント上に存在する種類のワークフローです。それを、実際に変更を実行する端末に統合することで、「承認された計画」と「実際に起きたこと」のギャップが縮まります。

    スケジュールタスクと自動化

    繰り返しの操作 — 設定バックアップ、ヘルスチェック、コンプライアンス監査 — は、cron式とタイムゾーン対応でスケジュールできます。デバイスコマンド、スクリプト、またはAIエージェントのプロンプトを、任意の間隔で実行するように設定できます。実行ログ、リトライの追跡、ステータスのフィルタリングにより、「何が実行され、何が失敗したか」を監視できます。

    Pythonスクリプト

    NetStacksには、Python対応のスクリプトエディタが含まれています。スクリプトは依存関係管理のためにPEP 723のインラインメタデータを使用するため、必要なパッケージをスクリプトファイル自体で宣言します。実行時環境は、uvを使って高速かつ決定論的なパッケージ解決を行います。Pythonツールチェーンを自動的にダウンロードし、管理します。

    これは、テンプレートやMOPsでカバーできる範囲を超える自動化タスクに役立ちます。たとえば、カスタム監査スクリプト、データ収集、API駆動のプロビジョニング、そして、実際のプログラミング言語が必要なあらゆるケースです。

    トポロジ可視化

    NetStacksは、複数の方法でネットワークトポロジを検出し、インタラクティブな2Dまたは3D可視化として描画します。SNMPのネイバーテーブル、LLDP/CDPデータ、CLIのネイバーコマンド、そしてNmapのフィンガープリンティングなどです。レイアウトはフォースディレクテッドまたは階層型にできます。デバイスはリアルタイムの状態を表示し、トポロジ上の任意のデバイスをダブルクリックすると、SSHセッションを直接開けます。

    NetBox、Netdisco、LibreNMSを利用している場合、NetStacksはそれらのシステムからインベントリとトポロジデータを取得し、自身の検出結果と統合できます。

    また、トポロジは視覚的なトレーサルートにも対応しています。トレーサルートを実行し、トポロジマップ上で経路がライトアップされる様子を確認できます。

    デバイス構成スナップショット

    NetStacksは、ハッシュベースの変更検知を用いて、デバイス群全体で時点ごとの構成スナップショットを取得できます。スナップショット間の差分を比較したり、テンプレートから生成した意図された構成と照合したり、任意のデバイスの変更履歴タイムラインを表示したりできます。これは、構成のドリフト検知、変更の監査、「インシデント中の“何が変わった?”」といった調査に役立ちます。

    アーキテクチャとパフォーマンス

    NetStacksはElectronではなく、Tauri(Rustバックエンド+Webフロントエンド)で構築されています。この違いは、毎日ずっと開いておくようなツールにとって重要です。高速に起動し、メモリ使用量が少なく、ウィンドウごとにChromiumのフルインスタンスを立ち上げません。RustバックエンドはSSH、資格情報管理、SNMP、検出、AI連携、そしてローカル処理をすべて担当します。フロントエンドはReactアプリケーションで、ローカルのWebSocketを介してバックエンドと通信します。

    すべてのデータは単一のSQLiteデータベースにローカルで保存されます。コア機能に対して外部サービスへの依存はありません。テレメトリも、いわゆる「電話ホーム」も、利用状況の分析もありません。

    オープンソース、オープンな餌ではない

    NetStacks TerminalとLocal AgentはApache 2.0のもとでオープンソースです。ソースはGitHubにあります。この投稿で説明しているすべての機能は、すべてのユーザーに提供されます。機能を半分削った「コミュニティ版」もなく、「SFTPを有効化するためのアップグレード」もありません。30日後に作動する機能ゲートもありません。

    NetStacksの商用側は別製品です。つまり、チームやエンタープライズが以下を必要とするためのControllerです:

    • パスワードがエンジニアのラップトップに触れない、中央集権的な資格情報管理
    • 12+のきめ細かな権限によるRBAC
    • SSO/SAML/LDAP/OIDC認証
    • 完全な監査ログとコンプライアンス報告
    • マルチユーザーでのセッション共有とプロキシされたSSH接続
    • アラート、インシデント、ITSM連携、デプロイのためのプラグインシステム

    もしあなたが単独のエンジニア、または全員が自分自身の資格情報を管理している小さなチームであれば、オープンソースのTerminalが完成品です。Controllerは、コンプライアンス要件や共用インフラを持つ組織向けに存在します。これは、必要としている機能のペイウォールではなく、別のユースケースに対する別製品です。

    こんな人に向いています

    あなたの仕事としてネットワークデバイスにSSHで接続する(ルータ、スイッチ、ファイアウォール、ロードバランサなど)のであれば、そして「いま見ているものが分かるように、端末が理解してくれたらいいのに」と思ったことがあるなら、NetStacksを試す価値があります。特に、次のような場合に有用です:

    • 何十台、何百台ものデバイスの資格情報を管理しており、それらを暗号化し整理したい
    • 複数ベンダ(Cisco、Juniper、Arista)にまたがっていて、違いを理解するAI支援が欲しい
    • 別の自動化パイプラインを用意せずに、テンプレートから構成を生成する必要がある
    • 専用のNMSを導入せずに、トポロジの可視性が欲しい
    • コンプライアンス対応やナレッジ共有のためにセッション記録が必要
    • ネットワーク向けに作られた、SecureCRTまたはPuTTYのための現代的なオープンソース代替を探している

    NetStacksは、ネットワークエンジニアが毎日行っている、手を動かすキーボード作業のためのデイリードライバです。つまり、デバイスへの接続、コマンド実行、課題のトラブルシューティング、変更作業、そして「何が起きたか」のドキュメント化です。

    はじめに

    macOS、Windows、およびLinux の署名付きインストーラーは netstacks.net/download で利用できます。ソースからビルドすることも可能です。リポジトリには3つのプラットフォームすべてのビルドドキュメントが含まれています。

    クイックスタート手順:

    1. NetStacks をインストールして起動する
    2. 資格情報ボールトのマスターパスワードを設定する
    3. デバイスを追加する(手動、CSV インポート、SecureCRT インポート、または NetBox 同期)
    4. 接続する

    詳細なドキュメントは netstacks.net/docs にあります。ソースコードは GitHub に掲載されています。

    ご質問があればコメントに投稿してください。ここで取り上げた各機能について、さらに深掘りしていくのをうれしく思います。