SSH (具体的には Git) 経由で認証するときに、Yubikey/U2F 資格情報をキャッシュするにはどうすればよいですか?

SSH (具体的には Git) 経由で認証するときに、Yubikey/U2F 資格情報をキャッシュするにはどうすればよいですか?

私は設定しましたU2Fを使用するためのGitHubアカウントYubikey(SSH経由)を使用していますが、Git bash プロンプトそのため、端末を使用するたびに、セキュリティ キーをタッチするように求められます。

SSH 認証情報、キー、FIDO U2F 標準の関係がよくわからないため、ターミナルを使用するたびにプロンプ​​トが表示されないように環境を設定する方法がわかりません。

たとえば、1 日に 1 回だけ、またはセッションごとに 1 回だけ尋ねるように設定できますか?

答え1

まず、U2Fは設計上キャッシュ不可能これは単なるパスワードではなく、チャレンジ/レスポンスプロトコルであり、トークンは毎回異なる「チャレンジ」を受け取り、これまで秘密鍵を PC に公開します (基本的にはスマートカードのようなものです)。これが主な強みです。

同じことはYubikeyの古典的なワンタイムパスワードにも当てはまります。名前の通り、一度サーバーは同じパスワードを複数回受け入れることはありません。また、すでに受け入れられているパスワードよりも古いパスワードも受け入れません。

そうは言っても、できることは 2 つあります。

  • まず、何があなたに資格情報を求めているのか理解してください。それは間違いなくないSSH。U2Fサポートパッチまだ OpenSSH に統合されておらず、対話型入力を要求したこともありません。パスワード + 2fa ではなく、SSH キーペアのみを使用します。ssh [email protected]

    同様に、実際に SSH ではなく HTTPS 経由でプッシュしている場合、私の知る限り、HTTP 認証にはまだ U2F 統合がないため、せいぜい 6 桁のコードが求められることになります。

    フルサイズのYubikeyをお持ちの場合は、プロンプトが表示されたときにライトが点滅しているかどうかを確認してください。点滅するのはU2Fの確認を待っているときだけです。点灯している場合は、代わりに従来のワンタイムパスワードが送信されます。見るYubikey で長いパスワードを入力すると、U2F ではなくなります。

  • 2番目はSSHの場合一般的に、OpenSSH の接続キャッシュ/多重化機能を有効にすることができます。サーバーにログインすると、リモート シェルを閉じた後でも (つまり、Git が転送を終了した後でも)、OpenSSH はその接続を数分間維持します。

    そのためには、 に次の内容を入力します~/.ssh/config

    Host *
        ControlMaster auto
        ControlPath ~/.ssh/S.%r@%h:%p
        ControlPersist 5m
    

    (古いバージョンの OpenSSH では ControlPersist がサポートされていないため、他の 2 つのオプションをそのまま使用できますが、 で手動で接続を開始する必要があります。)ssh -fNM [email protected]

関連情報