Azure DevOps での Git NTLM 認証の問題を解決する方法

Azure DevOps での Git NTLM 認証の問題を解決する方法
Azure DevOps での Git NTLM 認証の問題を解決する方法

認証失敗のトラブルシューティング

Git を使用して Azure DevOps サーバーでホストされているリポジトリのクローンを作成すると、特に認証に関して問題が発生することがあります。 Visual Studio はほとんどの構成をシームレスに処理しますが、Visual Studio を使用せずに新しいクライアントに Git をインストールすると、予期しない認証エラーが発生する可能性があります。この問題は通常、資格情報の管理および処理方法の違いが原因で発生します。

この記事では、新しいクライアントのセットアップで NTLM 認証が失敗するという特定の問題について説明します。この問題の症状、ログ、および潜在的な原因を調査し、リポジトリの認証とクローンを正常に作成するのに役立つ解決策を提供します。 NTLM 認証と Git 資格情報管理の複雑さを理解することが、この問題を解決する鍵となります。

Git および Azure DevOps を使用した NTLM 認証

認証情報管理のための Python のバックエンド スクリプト

import os
import subprocess
import keyring

def store_credentials(service_name, username, password):
    keyring.set_password(service_name, username, password)

def get_credentials(service_name, username):
    return keyring.get_password(service_name, username)

def configure_git_credentials(service_name, repo_url, username):
    password = get_credentials(service_name, username)
    if password is None:
        raise Exception("No stored credentials found.")
    command = ["git", "credential", "approve"]
    input_data = f"url={repo_url}\nusername={username}\npassword={password}\n"
    subprocess.run(command, input=input_data.encode(), check=True)

# Usage example:
# store_credentials("devops.mydomain.com", "myusername", "mypassword")
# configure_git_credentials("devops.mydomain.com", "https://devops.mydomain.com/Global/myrepo/_git/myrepo", "myusername")

NTLM 認証用に Git を構成する

Git 構成をセットアップするための Bash のフロントエンド スクリプト

#!/bin/bash

REPO_URL="https://devops.mydomain.com/Global/myrepo/_git/myrepo"
USERNAME="myusername"
PASSWORD="mypassword"

# Configure Git to use the credential manager
git config --global credential.helper manager-core

# Store credentials using git-credential-manager
echo "url=$REPO_URL" | git credential approve
echo "username=$USERNAME" | git credential approve
echo "password=$PASSWORD" | git credential approve

# Clone the repository
git clone $REPO_URL

Git での NTLM 認証の問題の修正

正しい NTLM 認証を保証する PowerShell スクリプト

param (
    [string]$repoUrl = "https://devops.mydomain.com/Global/myrepo/_git/myrepo",
    [string]$username = "myusername",
    [string]$password = "mypassword"
)

function Set-GitCredentials {
    param (
        [string]$repoUrl,
        [string]$username,
        [string]$password
    )

    $creds = @{
        url = $repoUrl
        username = $username
        password = $password
    }

    $creds | ConvertTo-Json | git credential-manager approve
}

# Set the credentials and clone the repo
Set-GitCredentials -repoUrl $repoUrl -username $username -password $password
git clone $repoUrl

NTLM 認証の問題への対処

NTLM 認証の問題は、さまざまなクライアントとクライアントが動作する環境間の構成の違いが原因で発生することがよくあります。よくある問題の 1 つは、適切な資格情報の管理が欠如していることです。 Git が NTLM を使用して認証を試みる場合、資格情報マネージャーに依存して必要な資格情報を提供します。これらの資格情報が利用できない場合、または正しく構成されていない場合、認証は失敗します。 Visual Studio がインストールされていない環境では、通常、この構成の大部分が自動的に処理されるため、これは特に問題となる可能性があります。

考慮すべきもう 1 つの側面は、基礎となるネットワーク設定と、それらが NTLM 認証とどのように相互作用するかです。たとえば、Git クライアントは安全なチャネル経由で通信するように適切に構成されている必要があり、SSL/TLS 設定に不一致があると認証の失敗につながる可能性があります。 Git クライアントが Windows の Schannel などの正しい SSL バックエンドを使用していること、および関連するすべての証明書が正しくインストールされていることを確認することは、認証を成功させるために重要です。さらに、プロキシ設定やファイアウォール ルールなどの環境固有の問題も認証プロセスに影響を与える可能性があります。

Git の NTLM 認証に関するよくある質問

  1. あるクライアントでは NTLM 認証が失敗するのに、別のクライアントでは失敗しないのはなぜですか?
  2. 失敗の原因は、構成の違いまたは資格情報の不足である可能性があります。両方のクライアントが同一に構成され、必要な認証情報が保存されていることを確認してください。
  3. Git 認証情報をシステムに安全に保存するにはどうすればよいですか?
  4. 使用 keyring.set_password Python の関数を使用して、認証情報をシステムのキーリングに安全に保存します。
  5. 役割は何ですか subprocess.run 認証スクリプト内で?
  6. このコマンドは、必要な認証情報を使用して Git を構成するサブプロセスを実行し、Git クライアントが適切に認証できることを確認するために使用されます。
  7. 資格情報マネージャー コアを使用するように Git を構成するにはどうすればよいですか?
  8. コマンドを実行します git config --global credential.helper manager-core 資格情報マネージャー コアをグローバルに使用するように Git をセットアップします。
  9. 新しいクライアントで NTLM ハンドシェイクが拒否されるのはなぜですか?
  10. ハンドシェイクは、資格情報が欠落しているか正しくないため、または SSL/TLS 構成の問題により拒否される場合があります。
  1. Bash スクリプトを使用して Git で認証情報を承認するにはどうすればよいですか?
  2. コマンドを使用する echo "url=$REPO_URL" | git credential approve リポジトリ URL を Git 認証情報マネージャーに保存します。
  3. 機能は何ですか $creds | ConvertTo-Json | git credential-manager approve PowerShellで?
  4. このコマンドは、資格情報を JSON 形式に変換し、Git 資格情報マネージャーで承認して、適切な認証を保証します。
  5. SSL/TLS 設定の違いは NTLM 認証に影響しますか?
  6. はい、SSL/TLS 設定の不一致により認証が失敗する可能性があります。正しい SSL バックエンドと証明書が使用されていることを確認してください。
  7. ネットワーク設定は NTLM 認証にどのような影響を与えますか?
  8. プロキシ設定とファイアウォール ルールが認証プロセスに干渉する可能性があります。ネットワーク構成が適切な通信を可能にしていることを確認してください。
  9. Windows 統合認証とは何ですか?また、NTLM とどのように関係しますか?
  10. Windows 統合認証 (WIA) には、NTLM およびその他のプロトコルが含まれています。 Windows 資格情報を使用したシームレスな認証が可能になります。

Git NTLM 認証問題の解決に関する最終的な考え方

結論として、Azure DevOps から Git リポジトリを複製する際の NTLM 認証エラーは、適切な資格情報の管理と構成を確保することで解決できます。システムのキーリングなどのツールを使用して資格情報を安全に保存し、資格情報マネージャーを使用するように Git を構成することで、ほとんどの問題に対処できます。さらに、SSL/TLS 設定とネットワーク構成に注意を払うことが重要です。概要を示した手順とスクリプトに従うことで、ユーザーは認証の問題を克服し、クライアント環境に関係なく、リポジトリへのシームレスなアクセスを維持できます。