2026リモートMacCISSHForwardAgentIdentitiesOnlybastion

2026 リモートMac CIでSSH ForwardAgentを許可するか:IdentitiesOnly、専用鍵、踏み台脅威マトリクス

ForwardAgent yes はノートPCの ssh-agent をリモートシェルへ一時貸与する。共有踏み台・強いsudo環境・SFTPアップロード主体のアカウントと混ぜると横移動が容易になる。本稿は脅威モデル、IdentitiesOnly、Host別名分割、deploy key/OIDC優先を整理し、ProxyJumpOIDCknown_hosts並列SFTP への導線を示す。

ForwardAgentIdentitiesOnlyリモートMacCI
2026 リモートMac CI ForwardAgent

見えないデフォルトの危険

チュートリアルの断片をそのままチーム共通ssh_configへ貼ると、人手デバッグと無人Runnerが同じForwardAgent方針を共有する。ノートPCのagentに個人用GitHubや別会社の鍵が混ざれば攻撃面は一覧しきれない。

OpenSSHが転送するagentはリモート側でUNIXドメインソケットとして現れる。同一Unixユーザー文脈で動くプロセスは署名要求を繰り返し試せる。launchdやcron、npmフックが同居すると露出時間がバーストする。

ラップトップ→バスション→リース済みMac→社内Gitという鎖では、どこかでsudo権を持つ管理者が転送経路を観察できる。これは ControlMaster が握る性能問題とは別軸の話だ。

成果物アップロード用SFTPユーザーとソース取得を同一Unixアカウントに載せると、ForwardAgentの乱用がリポジトリ鍵と成果物ディレクトリを同時に汚染する。

脅威モデル:署名判断を誰に委ねるか

単一テナントのリースMacと多チームバスションでは前提が違う。後者ではForwardAgentを既定で閉じる。

読み取り専用deploy keyやGitHub Apps、短期PATとOIDC連携はグローバル転送より証跡が残りやすい。

バスション運用が「どの指紋がいつ署名したか」をSOCに説明できないなら転送を許可しない。

rm-devrm-ci を分け、それぞれに別鍵と転送方針を割り当てる。

ForwardAgentはプロトコルの欠陥ではなく、署名という判断そのものを外部へ丸投げする機能だ。

測れる実験計画

RTTが120〜400msでもForwardAgentが削るのは帯域ではなく「鍵配布やレビューの会合の回数」である。ノート直結Git・deploy keyのみのMac・ForwardAgentありの三条件で復旧時間と監査チケット数を比較せよ。

deploy keyやOIDCでほぼ賄えるならForwardAgentは例外承認制へ降格する。

鍵ローテーションは チェックサムゲート と同じ変更票に載せ、レビュー担当とセキュリティ連絡先を固定する。

多地域チームではバスション地域とGitホスト地域がズレたときのデータ所在地要件とForwardAgentは無関係ではない(サブ処理者フローとして扱う)。

緊急時に無効化できるHost別名をRunbookへ書き、四半期ごとにssh -vで鍵提示順を点検する。

演習:侵害時の鍵失効(転送あり/なし)、deploy keyロテ後のサブモジュールgrep、SIEM三問、協力会社向け期限付きHost——いずれもチケットに残す。

Apple SiliconではbrewとシステムOpenSSHでIdentityFileがずれることがある。転送やrunner議論の前にssh -Gで揃える。やむを得ず転送するならバスション記録とCIパイプラインIDを突合し、規制領域では承認境界がエージェント内で混ざる点に留意する。

マトリクス

状況ForwardAgent利点リスク代替
専用リースMacの単独開発者短期のみ可鍵コピー省略ノートPCagent混在短期証明書
共有バスション原則禁止ログ欠落ProxyJump+分割鍵
セルフホストRunner非推奨楽に見える奪取で集約OIDC+deploy key
SFTPのみ禁止文脈混線Unix分割
深いサブモジュール慎重鍵削減監査困難ミラー/vendor
高コンプラ通常禁止否認困難SSH CA

表はオンボーディングのチェックリスト。「共有バスション」は転送拒否寄り、「専用リースMac」だけ狭い例外。

どれにも当てはまらない場合は、まずアカウント棚卸しとサブモジュールから。

How-to

Host rm-dev
  ForwardAgent yes
  IdentitiesOnly yes
Host rm-ci
  ForwardAgent no
  IdentitiesOnly yes
Host bastion
  ForwardAgent no

手順1:ヒューマン/自動化/SFTPを別Hostへ。

手順2:OIDC 優先。

手順3:転送後はSSH_AUTH_SOCKを解放。

手順4:IdentitiesOnly と単一IdentityFile

手順5:known_hosts を固定。

手順6:成果物パイプライン と分割。

手順7:ControlMaster と同様に緊急別名を用意。

関連

ProxyJumpOIDCknown_hosts並列SFTPホーム / 料金 / ヘルプ

読む順序はトポロジ優先:転送が経路に載る理由を説明できるまでProxyJumpを読み切る。OIDCで短命資格を先に敷けば、エージェント前提のssh_config肥大を避けられる。

FAQ

TCP転送との差は?

署名権の移動対バイトの移動。

FIDO2 skは?

触確認が不安定、CI鍵へ。

IdentitiesOnlyで遅い?

ホスト側ロックより安い。

サブモジュールにForwardAgentは必要?

稀。ミラーとモノレポで上流を一点化できればdeploy keyとOIDCで足りることが多い。

転送ありでSOC2を説明できる?

記録とCI IDを突合できることが前提。

まとめ:ForwardAgentは署名の一時委譲。共有経路では既定で閉じる。

限界:悪性ドットファイルには勝てない。

対比:SFTPMACのリースMacは隔離とSLAを契約へ。

例外承認と鍵ローテを同じ台帳へ。