fleetsh / ドキュメント

アーキテクチャ

CLI が引数と表示を担当し、ホスト一覧、認証情報、通信、実行、組み込み操作を 個別のパッケージに分けています。

パス 役割
cmd/fleetsh/ 起動処理、バージョン、割り込みによるキャンセル
internal/cli/ Cobra コマンド、入力確認、JSON と端末出力
internal/config/ 既存ファイルを上書きしない設定の初期化
internal/inventory/ 厳密な TOML 解析、検証、対象選択、ロック付きアトミック保存
internal/credentials/ OS の認証情報ストア、端末の非表示入力、既知の秘密値のマスキング
internal/transport/ SSH 認証、Agent、踏み台、SOCKS5/HTTP/HTTPS プロキシ、known_hosts、接続維持
internal/executor/ ワーカープール、期限、出力制限、PTY、sudo
internal/actions/ Linux のリソース確認、OS に応じた更新、検証付き再起動
internal/forwarding/ ローカル・リモート・動的転送、接続数制限とキャンセル
internal/testutil/ ローカルの SSH、Agent、プロキシのテスト環境
docs/ Jekyll のソース。gh-pages から公開

接続のライフサイクル

入力確認が混在しないように、並列処理の前に認証情報と Agent の鍵を取得します。 各接続先は独自の SSH クライアントと踏み台チェーンを持ちます。 すべてのネットワーク処理にキャンセルと接続期限を適用します。 未知のホスト鍵は確認を求め、変更された鍵は拒否します。 15 秒ごとに接続維持を確認し、応答しない接続を閉じます。

接続後、コマンド用の期限を別に開始します。キャンセル時は SSH クライアントを閉じ、 stdout、stderr、リモート終了状態を保持します。 各出力ストリームは 4 MiB に制限し、切り詰めを報告します。 ワーカープールが同時処理数を制限します。並べ替えたホスト一覧により、 結果の表示順を安定させます。

状態の変更

プロセス間のアドバイザリーロックで、協調する書き込みを保護します。 検証済み TOML を非公開の一時ファイルに書き、同期後に名前を変更します。 CLI の編集はコメントを書き直します。ホスト鍵の信頼には別のロックを使い、 並行した変更に対応するため、承認後に身元を再確認します。

更新は、すべての実行対象の事前確認が完了してから実行します。 再起動は元の起動 ID を記録し、再起動コマンドを送信して再接続を繰り返します。 起動 ID の変化と正常性の確認の両方を検証します。

終了コード

複数種類のリモート失敗がある場合は 1 を 3 より優先します。 対話シェルの非ゼロ終了状態は 1 を返します。コマンドの自動再試行はありません。

依存関係と検証

Cobra、go-toml/v2、x/crypto/ssh、x/net/proxy、x/term、go-keyring、 go-winio、flock のバージョンを go.mod と go.sum で固定します。 SSH の基本機能は OpenSSH 実行ファイルを呼び出しません。 macOS Keychain は標準の security に秘密値を stdin で渡し、 Linux は Secret Service と D-Bus を使います。

ローカル SSH サーバー、暗号化した鍵、Unix ソケットと Windows Agent パイプ、 厳密な信頼検証、接続先と踏み台の身元、認証付きプロキシ、期限、sudo 入力、 並列数、出力制限、更新の承認、再起動 ID をテストします。 CI では競合検出テストと CGO 不要の 6 種類のクロスビルドを実行します。 OS ストアの統合テストには、隔離した認証情報ストアの一時項目を使います。