SSH 키 인증 사용

Azure DevOps 서비스 | Azure DevOps Server | Azure DevOps Server 2022

macOS, Linux 또는 Windows SSH를 사용하여 Azure DevOps Git 리포지토리를 Azure Repos 안전하게 인증합니다.

이 문서에서는 RSA 키 쌍을 만들고, 공개 키를 프로필에 추가하고, SSH를 사용하여 리포지토리를 복제하는 방법을 보여 줍니다.

중요한

SSH URL이 변경되었지만 이전 SSH URL은 계속 작동합니다. SSH를 이미 설정한 경우 원격 URL을 새 형식으로 업데이트합니다.

최신 SSH URL은 .로 시작합니다 ssh.dev.azure.com. 이전 URL은 .를 사용합니다 vs-ssh.visualstudio.com.

  • SSH를 사용하는 원격을 확인합니다. 셸에서 실행 git remote -v 하거나 대신 GUI 클라이언트를 사용합니다.
  • 웹의 리포지토리를 방문하여 복제를 선택하세요.
  • SSH를 선택하고 새 SSH URL을 복사합니다.
  • 셸에서 업데이트하려는 리포지토리의 각 원격에 대해 git remote set-url <remote name> <new SSH URL>을 실행합니다. 또는 GUI 클라이언트를 사용하여 원격 URL 업데이트합니다.

필수 조건

카테고리 요구 사항
권한 리포지토리를 복제하기 위한 액세스
정책 SSH 인증 사용
로컬 도구 터미널 또는 셸에서 사용할 수 있는 Git 및 OpenSSH 클라이언트
Windows 환경 Windows를 사용하는 경우, Git for Windows 또는 git, ssh, ssh-keygen를 사용할 수 있는 다른 환경
로컬 액세스 로컬 .ssh 폴더에 액세스하고 키 파일을 만들 수 있는 권한

SSH 키 인증 작동 방식

SSH 공개 키 인증은 생성된 암호화 키의 비대칭 쌍에서 작동합니다. 공개 키를 Azure DevOps 공유하여 초기 SSH 연결을 확인합니다. 시스템에서 프라이빗 키를 안전하고 안전하게 유지합니다.

SSH 키 인증 설정

Azure Repos SSH를 사용하려면 RSA 키 쌍을 생성하고, 공개 키를 Azure DevOps 프로필에 추가하고, 서버 지문을 확인한 다음, SSH URL을 사용하도록 리포지토리를 복제하거나 업데이트합니다.

가장 빠른 경로만 필요한 경우 1단계, 2단계 및 3단계를 순서대로 완료한 다음 명령이 실패하는 경우에만 SSH 인증 문제 해결 을 사용합니다.

다음 단계에서는 명령줄(라고도 함 shell)을 사용하여 다음 플랫폼에서 SSH 키 인증의 구성을 다룹니다.

  • 리눅스
  • macOS
  • Windows 시스템에서 Git for Windows를 실행합니다.

Windows SSH 대신 Git 자격 증명 관리자를 사용합니다.

1단계: SSH 키 만들기

참고

시스템에서 RSA SSH 키를 이미 만든 경우 이 단계를 건너뛰고 2단계로 이동합니다. 이를 확인하려면 홈 디렉터리로 이동한 다음 .ssh 폴더를 살펴보세요(Windows에서는 %UserProfile%\.ssh\, Linux, macOS 및 Git Bash를 사용하는 Windows에서는 ~/.ssh/). 이름이 지정 id_rsa 되고 id_rsa.pub두 개의 파일이 표시되면 2단계로 계속 진행합니다.

키 기반 인증을 사용하려면 먼저 클라이언트에 대한 공개/프라이빗 키 쌍을 생성해야 합니다. OpenSSH는 여러 키 형식을 생성할 수 있지만 Azure DevOps SSH 인증을 위한 RSA 키를 지원합니다.

참고

Azure DevOps RSA 키를 지원하고 인증 중에 RSA-SHA2 서명 알고리즘을 사용합니다. RSA 키를 생성하고 SSH 클라이언트가 연결할 때 지원되는 RSA-SHA2 서명을 협상하도록 합니다.

Azure DevOps 대한 RSA 키 쌍을 생성하려면 PowerShell 또는 클라이언트와 같은 bash 다른 셸에서 다음 명령을 실행합니다.

ssh-keygen -t rsa -b 3072

명령의 출력은 다음 출력(사용자 이름 위치 username )을 표시해야 합니다.

Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\username/.ssh/id_rsa):

Enter 키를 눌러 기본값을 적용하거나 키를 생성할 경로 및/또는 파일 이름을 지정합니다. 이 시점에서 암호를 사용하여 프라이빗 키 파일을 암호화하라는 메시지가 표시됩니다. 암호는 비어 있을 수 있지만 권장되지는 않습니다. 파일이 노출되는 경우 암호는 프라이빗 키에 대한 또 다른 보호 계층을 추가합니다.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\username/.ssh/id_rsa.
Your public key has been saved in C:\Users\username/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:FHK6WjcUkcfQjdorarzlak1Ob/x7AmqQmmx5ryYYV+8 username@LOCAL-HOSTNAME
The key's randomart image is:
+---[RSA 3072]----+
|      . ** o     |
|       +.o= .    |
|      . o+       |
|      .+. .      |
|     .ooS  .     |
|  . .oo.=.o      |
|   =.= O.= .     |
|  . B BoE + . .  |
|   . *+*o. .o+   |
+----[SHA256]-----+

이제 지정한 위치에 퍼블릭/프라이빗 RSA 키 쌍이 있습니다. 파일은 .pub 퍼블릭 키이며 확장이 없는 파일은 프라이빗 키입니다.

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        10/11/2022   6:29 PM           2610 id_rsa
-a----        10/11/2022   6:29 PM            578 id_rsa.pub

중요한

프라이빗 키의 콘텐츠를 공유하지 마세요. 프라이빗 키가 손상된 경우 공격자는 이를 사용하여 서버가 연결이 사용자로부터 오고 있다고 생각하도록 속일 수 있습니다. 프라이빗 키 파일은 암호와 동일하며 동일한 방식으로 보호되어야 합니다.

2단계: Azure DevOps 공개 키 추가

이전 단계에서 생성된 공개 키를 사용자 ID와 연결합니다.

참고

SSH 공개 키는 사용자 프로필과 연결됩니다. 대부분의 경우 동일한 ID에 대해 조직 전체에서 하나의 키를 사용할 수 있습니다. 다른 ID 또는 계정을 사용하는 경우에만 별도의 키를 추가합니다.

  1. 웹 포털로 이동하고 사용자 인터페이스의 오른쪽 위에 있는 아바타 옆에 있는 아이콘을 선택하여 보안 설정을 엽니다. 표시되는 메뉴에서 SSH 공개 키를 선택합니다.

    Azure DevOps에서 SSH 공개 키 메뉴 항목과 선택된 사용자 아바타를 보여 주는 스크린샷

  2. + 새 키를 선택합니다.

    Azure DevOps의 보안 구성에 액세스하는 방법을 보여주는 스크린샷입니다.

  3. 공개 키 데이터 필드에 생성한 공개 키의 내용(예id_rsa.pub: )을 복사합니다.

    중요한

    키가 유효하지 않게 만들 수 있으므로 키 값 중간에 공백이나 줄 바꿈을 추가하지 마세요. 붙여넣기에서 서식 아티팩트를 추가하는 경우 저장하기 전에 제거합니다.

    Azure DevOps에서 공개 키 구성을 보여주는 스크린샷.

  4. 나중에 기억할 수 있도록 키에 유용한 설명을 제공합니다(이 설명은 프로필의 SSH 공개 키 페이지에 표시됨). 저장을 선택하여 공개 키를 저장합니다. 저장한 후에는 키를 변경할 수 없습니다. 키를 삭제하거나 다른 키에 대한 새 항목을 만들 수 있습니다. 사용자 프로필에 추가할 수 있는 키 수에는 제한이 없습니다.

    참고

    조직 정책은 SSH 키 만료를 적용할 수 있습니다. 자세한 내용은 조직의 애플리케이션 연결 및 보안 정책 변경을 참조하세요.

  5. SSH 공개 키 개요 페이지에서 서버 지문이 표시됩니다. SSH를 통해 Azure DevOps 처음 연결할 때 사용할 SHA256 지문을 기록해 둡다.

    Azure DevOps Services에서 보안 구성에 액세스하는 스크린샷입니다.

  6. 다음 명령을 실행하여 연결을 테스트합니다.

    ssh -T git@ssh.dev.azure.com
    

    처음으로 연결하는 경우 다음 출력이 표시됩니다.

    The authenticity of host 'ssh.dev.azure.com (<IP>)' can't be established.
    RSA key fingerprint is SHA256:ohD8VZEXGWo6Ez8GSEJQ9WpafgLFsOfLOtGGQCQo6Og.
    This key is not known by any other names
    Are you sure you want to continue connecting (yes/no/[fingerprint])?
    

    해당 지문을 SSH 공개 키 페이지에 표시된 SHA256 지문과 비교합니다. 값이 일치하는 경우에만 계속합니다.

  7. 계속하려면 입력 yes 합니다. 모든 항목이 올바르게 구성된 경우 출력은 다음과 같이 표시됩니다.

     Warning: Permanently added 'ssh.dev.azure.com' (RSA) to the list of known hosts.
     remote: Shell access is not supported.
     shell request failed on channel 0
    

    그렇지 않은 경우 질문 및 문제 해결에 대한 섹션을 참조하세요.

3단계: SSH를 사용하여 Git 리포지토리 복제

참고

이전에 HTTPS를 사용하여 복제한 리포지토리에서 SSH를 사용하려면 현재 HTTPS를 사용하고 있는 리포지토리에서 SSH 사용을 시작하는 방법을 참조하세요.

  1. 웹 포털에서 SSH 복제 URL을 복사합니다. 이 예제에서 SSH 복제 URL은 다음 URL의 첫 번째 부분에 표시된 것처럼 fabrikam-fiberdev.azure.com조직의 리포지토리에 대한 것입니다.

    Azure Repos SSH 복제 URL을 보여주는 스크린샷.

    참고

    Azure DevOps Services에서는 프로젝트 URL의 형식이 dev.azure.com/{your organization}/{your project}. 그러나 visualstudio.com 형식을 참조하는 이전 형식은 여전히 지원됩니다. 자세한 내용은 Azure DevOps 소개, 새 도메인 이름 URL을 사용하도록 기존 조직 전환 참조하세요.

  2. 명령 프롬프트에서 실행 git clone 합니다.

    git clone git@ssh.dev.azure.com:v3/fabrikam-fiber/FabrikamFiber/FabrikamFiber
    

    SSH 에이전트를 사용하지 않는 경우 암호를 입력하라는 메시지가 표시됩니다.

    Cloning into 'FabrikamFiber'...
    Enter passphrase for key '/c/Users/username/.ssh/id_rsa':
    remote: Azure Repos
    remote: Found 127 objects to send. (50 ms)
    Receiving objects: 100% (127/127), 56.67 KiB | 2.58 MiB/s, done.
    Resolving deltas: 100% (15/15), done.
    

    대신 지문 확인이 요청되면 2단계: 공개 키를 Azure DevOps에 추가를 다시 읽으세요. 다른 문제는 질문 및 문제 해결 섹션 을 참조하세요.

SSH를 최대한 활용하려면 SSH 에이전트를 사용하여 SSH 키를 관리합니다. 에이전트 설정은 이 문서의 범위를 벗어납니다.

AI를 사용하여 SSH 인증 리포지토리 작업

GitHub Copilot 또는 Azure DevOps MCP Server에서 Git 리포지토리를 사용하는 경우 자연어 프롬프트를 사용하여 SSH 설정의 유효성을 검사하고 인증 문제를 진단할 수 있습니다.

Task 예제 프롬프트
리포지토리가 사용하는 원격 확인 Check whether this repository uses SSH or HTTPS for origin, and show me how to switch it to SSH if needed.
SSH 설정 확인 Review my Git remote configuration and explain whether it matches the Azure Repos SSH format.
인증 실패 진단 Help me troubleshoot this Azure Repos SSH error: remote: Public key authentication failed.
SSH에서 사용 중인 키 확인 Explain how to tell which SSH key my client is offering to ssh.dev.azure.com and what to change if it is the wrong one.

Visual Studio Code 에이전트 모드는 원격을 확인하고, SSH 구성을 검토하고, 터미널 출력에서 다음 문제 해결 단계를 제안하는 데 유용합니다.

문제 해결 및 일반적인 질문

다음 섹션을 사용하여 SSH 설치 문제와 일치하는 문제를 찾습니다.

만료되었거나 잘못된 키

Q: SSH 키가 만료되었습니다. 어떻게 해야 합니까?

A: 이전 단계에 따라 새 SSH 키를 만들고 업로드합니다.

대신 옵션 Project 컬렉션 관리자는 SSH 키 만료 날짜의 유효성을 검사하는 정책을 사용하지 않도록 설정할 수 있습니다. 기본적으로 SSH 키 만료 유효성 검사 정책이 사용하도록 설정됩니다. 자세한 내용은 SSH 키 정책을 참조하세요.

7일 전과 키가 만료되는 경우 알림이 자동으로 수신됩니다. 이러한 알림과 함께 다음과 같은 메시지가 표시됩니다.

remote: Authentication failed: your SSH key has expired. To restore access, visit https://aka.ms/ado-ssh-public-key-expired for guidance.
remote: Public key authentication failed.
fatal:  Could not read from remote repository.

일반적인 연결 오류

A: 다음 경고 메시지 중 하나가 표시될 수 있습니다.

ssh-rsa is about to be deprecated and your request has been throttled. Please use rsa-sha2-256 or rsa-sha2-512 instead. Your session will continue automatically. For more details see https://devblogs.microsoft.com/devops/ssh-rsa-deprecation.

또는

You’re using ssh-rsa that is about to be deprecated and your request has been blocked intentionally. Any SSH session using ssh-rsa is subject to brown out (failure during random time periods). Please use rsa-sha2-256 or rsa-sha2-512 instead. For more details see https://devblogs.microsoft.com/devops/ssh-rsa-deprecation.

다음을 ~/.ssh/config(Windows %UserProfile%\.ssh\config) 파일에 추가하여 Azure DevOps 대한 보안 설정을 다운그레이드하도록 SSH 구성을 수정한 경우:

Host ssh.dev.azure.com vs-ssh.visualstudio.com
  HostkeyAlgorithms +ssh-rsa

지금 이 줄들을 제거하고 rsa-sha2-256rsa-sha2-512이 허용되도록 하세요.

자세한 내용은 블로그 게시물을 참조하세요.

이 해결 방법은 사용 중단된 ssh-rsa 경고와 지원되지 않는 ssh-rsa 오류에 대한 표준 해결 방법입니다. 이러한 시나리오의 첫 번째 단계로 사용합니다.

Q: SSH에서 연결을 설정할 수 없습니다. 어떻게 해야 합니까?

A: 다음과 같은 몇 가지 문제가 발생할 수 있습니다.

  • 지원되지 않는 ssh-rsa 사용

    You’re using ssh-rsa that is unsupported. Please use rsa-sha2-256 or rsa-sha2-512 instead. For more details see https://devblogs.microsoft.com/devops/ssh-rsa-deprecation.
    

    ssh-rsa 경고에 대한 이전 질문에서 설명한 것과 동일한 수정 조치를 적용합니다. HostkeyAlgorithms +ssh-rsa 재정의를 제거하고 rsa-sha2-256 및/또는 rsa-sha2-512를 사용합니다.

  • 일치하는 호스트 키 없음

    이 문제는 Azure DevOps 서비스 또는 blog 게시물 언급된 최신 Azure DevOps Server 버전에서 발생하지 않아야 합니다.

    Unable to negotiate with <IP> port 22: no matching host key type found. Their offer: ssh-rsa
    

    다음을 ~/.ssh/config(Windows %UserProfile%\.ssh\config) 파일에 추가하여 Azure DevOps 대한 보안 설정을 다운그레이드하도록 SSH 구성을 수정합니다.

    Host ssh.dev.azure.com vs-ssh.visualstudio.com
       HostkeyAlgorithms +ssh-rsa
    

    일반적으로 이전 자체 호스팅 Azure DevOps Server 구성의 경우 레거시 호환성 시나리오에 대해서만 이 해결 방법을 사용합니다. Azure DevOps 서비스의 경우 보안 기본값을 유지하고 영구 ssh-rsa 재정의를 방지합니다.

    중요한

    OpenSSH는 ssh-rsa 버전 8.2에서 공개 키 서명 알고리즘을 더 이상 사용하지 않으며 버전 8.8에서 기본적으로 사용하지 않도록 설정했습니다.

  • 일치하는 MAC 없음

    Unable to negotiate with <IP> port 22: no matching MAC found. Their offer: hmac-sha2-256,hmac-sha2-512
    

    다음을 ~/.ssh/config(Windows %UserProfile%\.ssh\config) 파일에 추가하여 Azure DevOps 대한 보안 설정을 다운그레이드하도록 SSH 구성을 수정합니다.

    Host ssh.dev.azure.com vs-ssh.visualstudio.com
       MACs +hmac-sha2-512,+hmac-sha2-256
    
  • 일치하는 키 교환 방법 없음

    Unable to negotiate with <IP> 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha256
    

    다음을 ~/.ssh/config(Windows %UserProfile%\.ssh\config) 파일에 추가하여 Azure DevOps 대한 보안 설정을 다운그레이드하도록 SSH 구성을 수정합니다.

    Host ssh.dev.azure.com vs-ssh.visualstudio.com
       KexAlgorithms +diffie-hellman-group-exchange-sha256,+diffie-hellman-group14-sha1,+diffie-hellman-group1-sha1
    

    중요한

    키 교환 알고리즘 diffie-hellman-group1-sha1 은 기본적으로 OpenSSH 버전 6.9diffie-hellman-group14-sha1버전 8.2에서 사용하지 않도록 설정됩니다.

자체 호스팅되는 Azure DevOps Server 인스턴스의 경우 Host 줄에서 ssh.dev.azure.com 또는 vs-ssh.visualstudio.com 대신 적절한 호스트 이름을 사용하세요.

SSH 에이전트 및 암호 문제

Q: SSH 에이전트가 실행되고 있지 않거나 키가 로드되지 않습니다. 어떻게 해야 합니까?

A: 키가 있지만 매번 SSH에서 암호를 묻는 메시지가 계속 표시되거나 키를 성공적으로 만든 후 복제가 실패하는 경우 SSH 에이전트가 실행 중인지 여부와 키가 로드되었는지 확인합니다.

다음 명령을 사용하여 에이전트가 현재 로드한 ID를 확인합니다.

ssh-add -l

출력에 에이전트에 ID가 없다고 표시되면 에이전트에 프라이빗 키를 추가합니다.

ssh-add ~/.ssh/id_rsa

Windows에서 기본 제공되는 OpenSSH 에이전트와 함께 PowerShell을 사용하는 경우, 키를 추가하기 전에 ssh-agentssh-agent 서비스가 실행 중인지 확인하세요. Git Bash 또는 다른 SSH 클라이언트를 사용하는 경우 해당 에이전트를 시작하고 키를 로드하기 위해 해당 클라이언트의 설명서를 참조하세요.

에이전트를 사용하지 않으려는 경우 SSH는 계속 작동할 수 있지만 키 암호를 더 자주 입력하라는 메시지가 표시됩니다.

Q: Git에서 키의 암호를 기억하려면 어떻게 해야 하나요?

A: SSH 에이전트를 사용합니다. Linux, macOS 및 Windows(Windows 10(빌드 1809부터) 또는 Git Bash와 Windows Git 사용)은 모두 SSH 에이전트와 함께 제공됩니다. SSH 에이전트는 반복적으로 사용하기 위해 SSH 키를 캐시할 수 있습니다. 사용 방법에 대한 자세한 내용은 SSH 공급업체 설명서를 참조하세요.

Q: PuTTY를 SSH 클라이언트로 사용하고 PuTTYgen을 사용하여 키를 생성했습니다. Azure DevOps Services에서 이러한 키를 사용할 수 있나요?

A: 예. PuTTYgen을 사용하여 프라이빗 키를 로드하고, 변환 메뉴로 이동하고, OpenSSH 키 내보내기를 선택합니다. 프라이빗 키 파일을 저장한 다음, 이 문서의 뒷부분에서 기본이 아닌 키 위치를 사용하는 방법에 대한 질문을 따릅니다. PuTTYgen 창에서 직접 공개 키를 복사하고 보안 설정의 키 데이터 필드에 붙여넣습니다.

Q: 업로드한 공개 키가 내 로컬 키와 동일한 키인지 확인하려면 어떻게 해야 하나요?

A: 업로드한 공개 키의 지문을 프로필에 표시된 지문과 비교하여 확인합니다. 명령줄을 사용하여 공개 키에 대해 다음 ssh-keygen 명령을 실행합니다. 기본값을 사용하지 않는 경우 경로 및 공개 키 파일 이름을 변경해야 합니다.

참고

SHA-256 지문을 선호합니다. 레거시 지문 형식과 비교해야 하는 경우에만 MD5를 사용합니다.

ssh-keygen -l -E md5 -f <path_to_your_public_key>
ssh-keygen -l -E sha256 -f <path_to_your_public_key>

그런 다음, 서명을 프로필의 서명과 비교합니다. 이 검사는 연결 문제가 있거나 Azure DevOps 키를 추가할 때 공개 키를 키 데이터 필드에 잘못 붙여넣을 때 문제가 있는 경우에 유용합니다.

Q: 현재 HTTPS를 사용하는 리포지토리에서 SSH를 사용하려면 어떻게 해야 하나요?

A:origin HTTPS에서 SSH URL로 변경하도록 Git의 원격을 업데이트합니다. SSH 복제 URL을 받은 후 다음 명령을 실행합니다.

git remote set-url origin <SSH URL to your repository>

이름이 origin인 원격 저장소에 액세스하는 Git 명령은 SSH를 사용합니다.

여러 키 및 조직 관리

Q: Azure DevOps Services에서 Git LFS를 사용하고 있으며 Git LFS에서 추적한 파일을 끌어오면 오류가 발생합니다.

A: Azure DevOps Services는 현재 SSH를 통해 LFS를 지원하지 않습니다. HTTPS를 사용하여 Git LFS 추적 파일이 있는 저장소에 연결합니다.

Q: ~/.ssh/id_rsa 및 ~/.ssh/id_rsa.pub가 아닌 기본이 아닌 키 위치를 사용하려면 어떻게 해야 하나요?

A: 기본값과 다른 위치에 저장된 키를 사용하려면 다음 두 작업을 수행합니다.

  1. 키는 사용자만 읽거나 편집할 수 있는 폴더에 있어야 합니다. 폴더에 더 넓은 권한이 있는 경우 SSH는 키를 사용하지 않습니다.

  2. 예를 들어 SSH 구성에서 "ID"로 지정하여 SSH에 키의 위치를 알려야 합니다.

    Host ssh.dev.azure.com
      IdentityFile ~/.ssh/id_rsa_azure
      IdentitiesOnly yes
    

설정은 IdentitiesOnly yes SSH가 다른 사용 가능한 ID를 사용하여 인증하지 않도록 합니다. 이 설정은 둘 이상의 ID를 사용할 수 있는 경우에 특히 중요합니다.

Q: SSH 키가 여러 대 있습니다. Azure DevOps 올바른 SSH 키를 사용하려면 어떻게 해야 하나요?

A: 일반적으로 SSH 클라이언트에 대해 여러 키를 구성할 때 클라이언트는 SSH 서버가 이를 수락할 때까지 각 키를 순차적으로 인증하려고 시도합니다.

그러나 이 방법은 SSH 프로토콜 및 Git SSH URL의 구조와 관련된 기술 제약 조건으로 인해 Azure DevOps 작동하지 않습니다. Azure DevOps 인증하는 동안 클라이언트에서 제공하는 첫 번째 키를 수락합니다. 요청된 리포지토리에 대해 이 키가 유효하지 않으면 사용 가능한 다른 키를 시도하지 않고 요청이 실패하여 다음 오류가 발생합니다.

remote: Public key authentication failed.
fatal: Could not read from remote repository.

Azure DevOps 경우 특정 키 파일을 명시적으로 사용하도록 SSH를 구성해야 합니다. 이 프로시저는 기본이 아닌 위치에 저장된 키를 사용하는 경우와 동일합니다. SSH에 Azure DevOps 호스트에 올바른 SSH 키를 사용하도록 지시합니다.

Q: Azure DevOps 다른 조직에 대해 다른 SSH 키를 사용하려면 어떻게 해야 하나요?

A: Azure DevOps 인증 중에 클라이언트가 제공하는 첫 번째 키를 허용합니다. 요청된 리포지토리에 대해 해당 키가 유효하지 않으면 다음 오류와 함께 요청이 실패합니다.

remote: Public key authentication failed.
fatal: Could not read from remote repository.

이 오류는 모든 Azure DevOps URL이 동일한 호스트 이름()ssh.dev.azure.com을 공유하므로 SSH에서 기본적으로 구분할 수 없으므로 발생합니다. 그러나 각각에 대해 고유한 키를 제공하여 서로 다른 조직을 구분하도록 SSH 구성을 수정할 수 있습니다. 호스트 별칭을 사용하여 SSH 구성 파일에서 별도의 Host 섹션을 만듭니다.

# The settings in each Host section are applied to any Git SSH remote URL with a
# matching hostname.
# Generally:
# * SSH uses the first matching line for each parameter name, e.g. if there's
#   multiple values for a parameter across multiple matching Host sections
# * "IdentitiesOnly yes" prevents keys cached in ssh-agent from being tried before
#   the IdentityFile values we explicitly set.
# * On Windows, ~/.ssh/your_private_key maps to %USERPROFILE%\.ssh\your_private_key,
#   e.g. C:\Users\<username>\.ssh\your_private_key.

# Imagine that we have the following two SSH URLs:
# * git@ssh.dev.azure.com:v3/Fabrikam/Project1/fab_repo
#   * For this, we want to use `fabrikamkey`, so we'll create `devops_fabrikam` as
#     a Host alias and tell SSH to use `fabrikamkey`.
# * git@ssh.dev.azure.com:v3/Contoso/Project2/con_repo
#   * For this, we want to use `contosokey`, so we'll create `devops_contoso` as
#     a Host alias and tell SSH to use `contosokey`.
#
# To set explicit keys for the two host aliases and to tell SSH to use the correct
# actual hostname, add the next two Host sections:
Host devops_fabrikam
  HostName ssh.dev.azure.com
  IdentityFile ~/.ssh/private_key_for_fabrikam
  IdentitiesOnly yes

Host devops_contoso
  HostName ssh.dev.azure.com
  IdentityFile ~/.ssh/private_key_for_contoso
  IdentitiesOnly yes

그런 다음 실제 URL을 사용하는 대신, 기존 원격의 호스트 이름을 devops_fabrikamdevops_contoso으로 각각 대체하여 각 리포지토리의 원격으로 이러한 URL을 사용하도록 Git에 알리세요. 예를 들어 git@ssh.dev.azure.com:v3/Fabrikam/Project1/fab_repogit@devops_fabrikam:v3/Fabrikam/Project1/fab_repo로 변합니다.

알림 및 계정 문제

Q: 내 SSH 키에 대해 어떤 알림을 받을 수 있나요?

A: SSH 키에 대한 몇 가지 알림을 받을 수 있습니다.

  • 조직에 새 SSH 키가 추가되었습니다.

  • 계정과 연결된 SSH 키는 7일 후에 만료되며 인증에 유효하지 않습니다.

  • 계정과 연결된 SSH 키가 만료되어 인증에 더 이상 유효하지 않습니다.

    알림 예제

    SSH 키 전자 메일 알림을 보여 주는 스크린샷

Q: 내 계정에서 다른 사람이 SSH 키를 추가한다고 생각되면 어떻게 해야 하나요?

A: 시작하지 않은 SSH 키 등록 알림을 받으면 자격 증명이 손상될 수 있습니다.

다음 단계는 암호가 손상되었는지 여부를 조사하는 것입니다. 암호 변경은 항상 이 공격 벡터를 방어하는 좋은 첫 번째 단계입니다. Microsoft Entra 사용자인 경우 관리자에게 문의하여 알 수 없는 원본 또는 위치에서 계정이 사용되었는지 확인합니다.

Q: 암호를 GIT_SSH_COMMAND="ssh -v" git fetchno mutual signature algorithmcorresponding algo not in PubkeyAcceptedAlgorithms입력하라는 메시지가 계속 표시되면 어떻게 해야 하나요?

A: Fedora Linux와 같은 일부 Linux 배포판은 현재 Azure DevOps SSH 구성에서 허용하는 것보다 더 강력한 SSH 서명 알고리즘이 필요한 암호화 정책을 적용합니다.

이 문제를 해결하려면 SSH 구성(~/.ssh/config)에 다음 코드를 추가합니다.

Host ssh.dev.azure.com vs-ssh.visualstudio.com
   PubkeyAcceptedAlgorithms +ssh-rsa

OpenSSH 버전에서 이전 설정 이름만 지원하는 경우 대신 사용합니다 PubkeyAcceptedKeyTypes .

임시 호환성 해결 방법으로 이 코드를 사용합니다. 가능하면 SSH 클라이언트 또는 서버 구성을 업그레이드하고 테스트 후 이 재정의를 제거합니다.

일반적인 질문

Q: Azure DevOps Server SSH를 사용할 수 있나요?

A: 예. 자체 호스팅 Azure DevOps Server 인스턴스의 경우 SSH 구성과 원격 URL에서 ssh.dev.azure.com 대신 서버 호스트 이름을 사용합니다. 이 문서에서 ssh.dev.azure.com 또는 vs-ssh.visualstudio.com가 표시되는 부분은 서버의 호스트 이름으로 대체하십시오.

Q: Azure DevOps Services SSH 키가 작동하지 않은 이유는 무엇인가요?

A: SSH 키 인증을 사용하려면 전체 인증 흐름(웹)을 사용하여 Azure DevOps Services에 정기적으로 로그인해야 합니다. 30일마다 한 번씩 로그인하는 것은 많은 사용자에게 충분하지만 Microsoft Entra 구성에 따라 더 자주 로그인해야 할 수도 있습니다. SSH 키가 작동하지 않으면 먼저 조직에 로그인하고 전체 인증 프롬프트를 완료합니다. SSH 키가 여전히 작동하지 않는 경우 만료되었는지 확인합니다.

자체 호스팅되는 Azure DevOps Server 인스턴스의 경우 Host 줄에서 ssh.dev.azure.com 또는 vs-ssh.visualstudio.com 대신 적절한 호스트 이름을 사용하세요.