FAQ

よくある質問

SSH-Frontièreとは正確には何ですか?

Rustで書かれた置換ログインシェルです。サービスアカウントの/etc/passwd/bin/bashの代わりにインストールされます。すべてのSSH接続はSSH-Frontièreを経由し、TOML設定ファイルに対してコマンドを検証してから実行します。

SSH踏み台サーバーですか?

いいえ。SSH踏み台サーバー(Teleport、Boundary)は他のサーバーへの接続を中継するプロキシです。SSH-Frontièreは中継しません — インストールされているサーバー上で何が実行されるかを制御します。

踏み台サーバーはサーバーフリートへの人間のアクセスを管理します。SSH-Frontièreは、特定のサーバー上の特定のアクションに対するサービスアカウントのアクセス(CIランナー、AIエージェント、スクリプト)を管理します。

sudoの代わりになりますか?

いいえ、補完的です。SSH-FrontièreはSSHクライアントが要求できる内容を制御します(第2層)。sudo実行に必要なシステム権限を制御します(第3層)。両方を組み合わせることで多層防御を実現します。

TOMLファイルなしで使用できますか?

いいえ。設定ファイルは必須です。これは意図的なものです:すべてが明示的、宣言的、監査可能です。許容モードもシェルへのフォールバックもありません。

設定が無効な場合はどうなりますか?

SSH-Frontièreは起動時に設定を完全に検証します(フェイルファスト)。設定が無効な場合、プログラムはコード129と明示的なエラーメッセージをログに出力して終了します。コマンドは実行されません。SSHクライアントにはサービスが利用不可であることだけが表示されます — エラーの詳細は決して表示されません。診断情報はサーバー側に留まります。

設定を安全にテストできます:

ssh-frontiere --check-config --config /etc/ssh-frontiere/config.toml

問題を診断するには?

いくつかのツールが利用可能です:

  1. 設定の検証ssh-frontiere --check-configで構文と整合性をチェック
  2. helpコマンド:クライアントの実効レベルでアクセス可能なアクションを表示
  3. listコマンド:短縮版(ドメイン+アクション)
  4. JSONログ:すべてのコマンド(実行または拒否)がタイムスタンプ、コマンド、引数、レベル、結果と共にログに記録
  5. 終了コード:0 = 成功、128 = 拒否、129 = 設定エラー、130 = タイムアウト、131 = レベル不足、132 = プロトコルエラー、133 = ボディstdinの早期終了

AIエージェントで使用できますか?

はい、これはファーストクラスのユースケースです。helplistコマンドは構造化JSONを返し、エージェントが直接パースできます。ヘッダプロトコル(プレフィックス+#$>)は、人間の可読性を損なわずに機械が読み取れるように設計されています。

詳細な設定については、AIエージェントガイドを参照してください。

ソースコードの依存関係は何ですか?

直接依存関係は3つです:

クレート用途
serde + serde_jsonJSONシリアライゼーション(ログ、レスポンス)
toml設定の読み込み

非同期ランタイムなし、Tokioなし、Webフレームワークなし。静的バイナリは約1 MBです。

なぜRustでGo/Pythonではないのですか?

  1. メモリ安全性:バッファオーバーフロー、ユーズアフターフリーなし — セキュリティコンポーネントにとって重要
  2. 静的バイナリ:muslでコンパイル、システム依存関係なし
  3. パフォーマンス:ミリ秒で起動、ランタイムなし
  4. unsafeなし:Cargoのlintで禁止(unsafe_code = "deny"

なぜTOMLでYAMLやJSONではないのですか?

この選択はADR 0001で文書化されています。

トークン認証はどのように機能しますか?

2つのモードがあります:

  1. シンプルモードchallenge_nonce = false):クライアントがSHA-256(secret)を計算してプルーフとして送信
  2. ノンスモードchallenge_nonce = true):サーバーがノンスを送信し、クライアントがSHA-256(XOR_encrypt(secret || nonce, secret))を計算

ノンスモードはリプレイ攻撃を防御します:ノンスにより各プルーフがユニークになります。

複数のSSH鍵を使用できますか?

はい。authorized_keysの各鍵は独自の--levelを持ちます。異なるレベルの複数の鍵が共存できます:

command="/usr/local/bin/ssh-frontiere --level=read",restrict ssh-ed25519 AAAA... monitoring
command="/usr/local/bin/ssh-frontiere --level=ops",restrict ssh-ed25519 AAAA... runner-ci
command="/usr/local/bin/ssh-frontiere --level=admin",restrict ssh-ed25519 AAAA... admin

レスポンス形式は何ですか?

標準出力とエラーはストリーミングで送信され(プレフィックス>>>>!)、その後>>>プレフィックス付きの1行の最終JSONレスポンスが送信されます:

>> hello from ssh-frontiere
>>> {"command":"test hello","status_code":0,"status_message":"executed","stdout":null,"stderr":null}

SSH-Frontièreを更新するには?

  1. 新しいバージョンをコンパイル(make release
  2. バイナリをサーバーにコピー(scp
  3. 確認(ssh user@server + help

データ移行なし、データベーススキーマなし。TOMLファイルはgitでバージョン管理できます。

貢献するには?

貢献ガイドを参照してください。要約:イシューを作成、フォーク、TDD、プルリクエスト、CIがグリーン。AIで生成された貢献も受け入れられます。

ソースコードはどこにありますか?

ソースコードはGitHubリポジトリで公開されています。ライセンス:EUPL-1.2