セキュリティ設計
パスワードは OS の認証情報ストアに保存し、SSH ログイン前にサーバー鍵を確認します。 このページでは認証情報と接続の扱いを説明します。
秘密情報
ホスト一覧には認証情報の参照だけを保存します。
厳密な解析で平文パスワードや未対応フィールドを拒否し、
エラーに設定元の行を表示しません。
パスワードとパスフレーズは端末の非表示入力で取得し、表示される入力やパイプ入力は拒否します。
認証情報の置換には明示的な --replace が必要です。
秘密値は Windows Credential Manager、macOS Keychain、Linux Secret Service に保存します。
ストアのエラー時に平文保存へ切り替えません。macOS は security -i と stdin を使うため、
秘密値をプロセス引数に含めません。秘密値は 2560 バイト以下に制限します。
Agent のソケットと秘密鍵はローカルに保持します。
sudo の秘密値は SSH チャネルの stdin で送信します。
echo password のような構文でコマンドを組み立てません。
バッファに保持した実行出力と診断から既知の秘密値をマスキングしますが、
任意のアプリケーションの秘密情報は識別できません。
対話シェルの出力は端末の動作を維持するため、そのまま渡します。
実行ログや履歴は永続化しません。
ホストの身元
接続先とすべての踏み台で known_hosts を厳密に検証します。
初回接続はフィンガープリントを表示し、対話的な y を求めます。
自動実行では未知の鍵を拒否します。変更された鍵は、新規信頼の確認を出さずに拒否します。
信頼情報の書き込みをロックし、承認後に再検証します。
hostkey reset は確認または --yes が必要です。
共有、ワイルドカード、マーカー付きのレコードは手動編集を求め、
1 台のリセットで広範囲の信頼を削除しないようにします。
操作とリソース
実行には並列数の上限、接続とコマンドの期限、キャンセル、接続維持、出力制限を適用します。 ユーザーが指定したシェルコマンドは、リモートシェルで実行します。 組み込み操作のコマンドは固定テンプレートと安全な引用処理で生成します。
更新のドライランは OS の調査だけを行います。事前確認の失敗があれば全更新を中止します。
実際の更新と再起動には、対象別名を表示した確認、または自動実行用の明示的な
--yes が必要です。再起動の標準並列数は 2 です。
新しい起動 ID と uptime の確認に成功した場合のみ、再起動成功とします。
ファイルとプラットフォームの確認
ホスト一覧の更新には、アドバイザリーロック、非公開の一時ファイル、アトミックな置換を使います。 初期化は既存ファイルを上書きしません。ホスト一覧と known_hosts のシンボリックリンクを拒否します。 Unix の新規ディレクトリとファイルは 0700 と 0600、Windows はディレクトリの ACL を使用します。 秘密値はホスト一覧のバックアップに含めず、参照名だけから復元することもできません。
テストは localhost の環境と OS ストアの一時項目を使用します。実際の VPS は不要です。 完了した検証と残るリリース作業はロードマップで区別します。
脆弱性の報告
非公開の脆弱性報告を利用してください。 SECURITY.mdも参照してください。