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
問題を診断するには?
いくつかのツールが利用可能です:
- 設定の検証:
ssh-frontiere --check-configで構文と整合性をチェック helpコマンド:クライアントの実効レベルでアクセス可能なアクションを表示listコマンド:短縮版(ドメイン+アクション)- JSONログ:すべてのコマンド(実行または拒否)がタイムスタンプ、コマンド、引数、レベル、結果と共にログに記録
- 終了コード:0 = 成功、128 = 拒否、129 = 設定エラー、130 = タイムアウト、131 = レベル不足、132 = プロトコルエラー、133 = ボディstdinの早期終了
AIエージェントで使用できますか?
はい、これはファーストクラスのユースケースです。helpとlistコマンドは構造化JSONを返し、エージェントが直接パースできます。ヘッダプロトコル(プレフィックス+、#、$、>)は、人間の可読性を損なわずに機械が読み取れるように設計されています。
詳細な設定については、AIエージェントガイドを参照してください。
ソースコードの依存関係は何ですか?
直接依存関係は3つです:
| クレート | 用途 |
|---|---|
serde + serde_json | JSONシリアライゼーション(ログ、レスポンス) |
toml | 設定の読み込み |
非同期ランタイムなし、Tokioなし、Webフレームワークなし。静的バイナリは約1 MBです。
なぜRustでGo/Pythonではないのですか?
- メモリ安全性:バッファオーバーフロー、ユーズアフターフリーなし — セキュリティコンポーネントにとって重要
- 静的バイナリ:muslでコンパイル、システム依存関係なし
- パフォーマンス:ミリ秒で起動、ランタイムなし
unsafeなし:Cargoのlintで禁止(unsafe_code = "deny")
なぜTOMLでYAMLやJSONではないのですか?
- TOML:読みやすい、型付き、コメント可能、Rust標準、意味のあるインデントなし
- YAML:意味のあるインデントがエラーを起こしやすい、危険な暗黙の型変換(
on/off→ boolean) - JSON:コメントなし、冗長、人間の設定用に設計されていない
この選択はADR 0001で文書化されています。
トークン認証はどのように機能しますか?
2つのモードがあります:
- シンプルモード(
challenge_nonce = false):クライアントがSHA-256(secret)を計算してプルーフとして送信 - ノンスモード(
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}
- 最終JSONの
stdout/stderr=null:出力はストリーミングで送信済み status_code= 0:成功(パススルーでの子プロセスの終了コード)
SSH-Frontièreを更新するには?
- 新しいバージョンをコンパイル(
make release) - バイナリをサーバーにコピー(
scp) - 確認(
ssh user@server+help)
データ移行なし、データベーススキーマなし。TOMLファイルはgitでバージョン管理できます。
貢献するには?
貢献ガイドを参照してください。要約:イシューを作成、フォーク、TDD、プルリクエスト、CIがグリーン。AIで生成された貢献も受け入れられます。
ソースコードはどこにありますか?
ソースコードはGitHubリポジトリで公開されています。ライセンス:EUPL-1.2。