SSH 키 인증 사용
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
macOS, Linux 또는 Windows에서 SSH를 통해 Git 리포지토리에 연결하여 Azure DevOps와 안전하게 연결할 수 있습니다.
Important
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 키 인증 작동 방식
SSH 공개 키 인증은 생성된 암호화 키의 비대칭 쌍에서 작동합니다. 공개 키는 Azure DevOps와 공유되며 초기 ssh 연결을 확인하는 데 사용됩니다. 프라이빗 키는 시스템에서 안전하고 안전하게 유지됩니다.
SSH 키 인증 설정
다음 단계에서는 명령줄(라고도 함 shell
)을 사용하여 다음 플랫폼에서 SSH 키 인증의 구성을 다룹니다.
- Linux
- macOS
- Windows용 Git을 실행하는 Windows 시스템
참고 항목
Visual Studio 2017을 기준으로 SSH를 사용하여 Azure DevOps Git 리포지토리에 연결할 수 있습니다.
팁
Windows에서는 Git 자격 증명 관리자 또는 개인용 액세스 토큰을 사용하는 것이 좋습니다.
1단계: SSH 키 만들기
참고 항목
시스템에서 RSA SSH 키를 이미 만든 경우 이 단계를 건너뛰고 SSH 키를 구성합니다.
이를 확인하려면 홈 디렉터리로 이동하여 폴더(%UserProfile%\.ssh\
Windows 또는 ~/.ssh/
Linux, macOS 및 Git Bash가 있는 Windows)를 살펴봅 .ssh
니다. 이름이 지정 id_rsa
되고 id_rsa.pub
각각 SSH 키 구성을 계속하는 두 개의 파일이 표시되는 경우
키 기반 인증을 사용하려면 먼저 클라이언트에 대해 공개/프라이빗 키 쌍을 생성해야 합니다. ssh-keygen.exe 키 파일을 생성하는 데 사용되며 DSA, RSA, ECDSA 또는 Ed25519 알고리즘을 지정할 수 있습니다. 알고리즘을 지정하지 않으면 Ed25519가 사용됩니다.
참고 항목
Azure DevOps에서 지원하는 유일한 SSH 키 유형은 RSA입니다.
Azure DevOps에서 지원하는 RSA 알고리즘(RSA-SHA2-256 또는 RSA-SHA2-512)을 사용하여 키 파일을 생성하려면 PowerShell 또는 클라이언트와 같은 bash
다른 셸에서 다음 명령 중 하나를 실행합니다.
ssh-keygen -t rsa-sha2-256
또는
ssh-keygen -t rsa-sha2-512
명령의 출력은 다음 출력(사용자 이름 위치 username
)을 표시해야 합니다.
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\username/.ssh/id_rsa):
Enter 키를 눌러 기본값을 적용하거나 키를 생성할 경로 및/또는 파일 이름을 지정할 수 있습니다. 이 시점에서 암호를 사용하여 프라이빗 키 파일을 암호화하라는 메시지가 표시됩니다. 암호는 비어 있을 수 있지만 권장되지는 않습니다. 암호는 키 파일과 함께 사용되어 2단계 인증을 제공합니다.
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
Important
프라이빗 키의 콘텐츠를 공유하지 마세요. 프라이빗 키가 손상된 경우 공격자는 이를 사용하여 서버가 연결이 사용자로부터 오고 있다고 생각하도록 속일 수 있습니다. 프라이빗 키 파일은 암호와 동일하며 동일한 방식으로 보호되어야 합니다.
2단계: Azure DevOps에 공개 키 추가
이전 단계에서 생성된 공개 키를 사용자 ID와 연결합니다.
참고 항목
액세스 권한이 있고 SSH를 사용하려는 각 조직에 대해 이 작업을 반복해야 합니다.
웹 포털로 이동하고 사용자 인터페이스의 오른쪽 위에 있는 아바타 옆에 있는 아이콘을 선택하여 보안 설정을 엽니다. 표시되는 메뉴에서 SSH 공개 키를 선택합니다.
+ 새 키를 선택합니다.
공개 키 데이터 필드에 생성한 공개 키의 내용(예
id_rsa.pub
: )을 복사합니다.Important
Azure DevOps에서 잘못된 공개 키를 사용할 수 있으므로 키 데이터 필드에 공백 또는 새 줄을 추가하지 마십시오. 키를 붙여넣을 때 줄 바꿈이 끝에 추가되는 경우가 많습니다. 이 줄이 발생하면 반드시 제거해야 합니다.
나중에 기억할 수 있도록 키에 유용한 설명을 제공합니다(이 설명은 프로필의 SSH 공개 키 페이지에 표시됨). 저장을 선택하여 공개 키를 저장합니다. 저장한 후에는 키를 변경할 수 없습니다. 키를 삭제하거나 다른 키에 대한 새 항목을 만들 수 있습니다. 사용자 프로필에 추가할 수 있는 키 수에는 제한이 없습니다. 또한 Azure DevOps에 저장된 SSH 키는 1년 후에 만료됩니다. 키가 만료되면 새 키 또는 동일한 키를 업로드하여 SSH를 통해 Azure DevOps에 계속 액세스할 수 있습니다.
SSH 공개 키 개요 페이지에서 서버 지문이 표시됩니다. SSH를 통해 Azure DevOps에 처음 연결할 때 사용할 SHA256 지문을 기록해 둡니다.
다음 명령을 실행하여 연결을 테스트합니다.
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 지문과 비교합니다. 일치하는 경우에만 계속 진행하세요!
계속하려면 입력
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를 사용하려면 원격을 SSH로 업데이트하는 방법을 참조하세요.
웹 포털에서 SSH 복제 URL을 복사합니다. 이 예제에서 SSH 복제 URL은 다음 URL
dev.azure.com
의 첫 번째 부분에 표시된 것처럼 fabrikam-fiber라는 조직의 리포지토리에 대한 것입니다.참고 항목
Azure DevOps Services를 사용하면 프로젝트 URL의 형식이
dev.azure.com/{your organization}/{your project}
됩니다. 그러나 형식을 참조visualstudio.com
하는 이전 형식은 여전히 지원됩니다. 자세한 내용은 새 도메인 이름 URL을 사용하도록 기존 조직 전환, Azure DevOps 소개를 참조하세요.명령 프롬프트에서 실행
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 키를 관리하는 것이 일반적입니다. 하지만 에이전트 설정은 이 문서의 범위를 벗어납니다.
질문 및 문제 해결
Q: ssh-rsa 관련 경고가 표시됩니다. 어떻게 해야 합니까?
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.
(Windows) 파일에 다음을 추가하여 Azure DevOps에 대한 보안 설정을 다운그레이드하도록 SSH 구성을 ~/.ssh/config
%UserProfile%\.ssh\config
수정한 경우:
Host ssh.dev.azure.com vs-ssh.visualstudio.com
HostkeyAlgorithms +ssh-rsa
이제 이러한 줄을 제거하고 허용되는지 확인 rsa-sha2-256
rsa-sha2-512
합니다.
자세한 내용은 블로그 게시물을 참조하세요.
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.
(Windows) 파일에 다음을 추가하여 Azure DevOps에 대한 보안 설정을 다운그레이드하도록 SSH 구성을
~/.ssh/config
%UserProfile%\.ssh\config
수정한 경우:Host ssh.dev.azure.com vs-ssh.visualstudio.com HostkeyAlgorithms +ssh-rsa
이제 이러한 줄을 제거하고 허용되는지 확인
rsa-sha2-256
rsa-sha2-512
합니다.자세한 내용은 블로그 게시물을 참조하세요.
일치하는 호스트 키 없음
이 문제는 블로그 게시물에 언급된 대로 Azure DevOps Service 또는 최신 Azure DevOps Server 버전에서 발생하지 않아야 합니다.
Unable to negotiate with <IP> port 22: no matching host key type found. Their offer: ssh-rsa
(Windows) 파일에 다음을 추가하여 Azure DevOps에 대한 보안 설정을 다운그레이드하도록 SSH 구성을
~/.ssh/config
%UserProfile%\.ssh\config
수정합니다.Host ssh.dev.azure.com vs-ssh.visualstudio.com HostkeyAlgorithms +ssh-rsa
일치하는 MAC 없음
Unable to negotiate with <IP> port 22: no matching MAC found. Their offer: hmac-sha2-256,hmac-sha2-512
(Windows) 파일에 다음을 추가하여 Azure DevOps에 대한 보안 설정을 다운그레이드하도록 SSH 구성을
~/.ssh/config
%UserProfile%\.ssh\config
수정합니다.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
(Windows) 파일에 다음을 추가하여 Azure DevOps에 대한 보안 설정을 다운그레이드하도록 SSH 구성을
~/.ssh/config
%UserProfile%\.ssh\config
수정합니다.Host ssh.dev.azure.com vs-ssh.visualstudio.com KexAlgorithms +diffie-hellman-group-exchange-sha256,+diffie-hellman-group14-sha1,+diffie-hellman-group1-sha1
Important
키 교환 알고리즘
diffie-hellman-group1-sha1
은 OpenSSH 버전 6.9 및diffie-hellman-group14-sha1
버전 8.2에서 기본적으로 사용하지 않도록 설정되었습니다.
팁
Azure DevOps Server 및 TFS의 자체 호스팅 인스턴스의 경우 줄에서 ssh.dev.azure.com vs-ssh.visualstudio.com
적절한 호스트 이름을 Host
대신 사용합니다.
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
명령을 실행하여 프로필에 표시된 공개 키와 함께 업로드된 공개 키의 지문을 확인할 수 있습니다. 기본값을 사용하지 않는 경우 경로 및 공개 키 파일 이름을 변경해야 합니다.
참고 항목
2024년 8월/9월을 기준으로 MD5에서 SHA-256 해시로 마이그레이션합니다. 전환 기간 동안 올바른 함수를 선택해야 할 수 있습니다.
ssh-keygen -l -E md5 -f <path_to_your_public_key> -- use this for MD5 fingerprints
ssh-keygen -l -E sha256 -f <path_to_your_public_key> -- use this for SHA-256 fingerprints
그런 다음, 서명을 프로필의 서명과 비교할 수 있습니다. 이 검사는 연결 문제가 있거나 Azure DevOps에 키를 추가할 때 공개 키를 키 데이터 필드에 잘못 붙여넣는 것에 대한 우려가 있는 경우에 유용합니다.
Q: 현재 HTTPS를 사용하는 리포지토리에서 SSH를 사용하려면 어떻게 해야 하나요?
A: HTTPS에서 SSH URL로 변경하려면 Git에서 원격을 업데이트 origin
해야 합니다. 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: 기본값과 다른 위치에 저장된 키를 사용하려면 다음 두 작업을 수행합니다.
키는 사용자만 읽거나 편집할 수 있는 폴더에 있어야 합니다. 폴더에 더 넓은 권한이 있는 경우 SSH는 키를 사용하지 않습니다.
예를 들어 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를 구성해야 합니다. 이 프로시저는 기본이 아닌 위치에 저장된 키를 사용하는 경우와 동일합니다. Azure DevOps 호스트에 올바른 SSH 키를 사용하도록 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에서 기본적으로 이러한 URL을 구분할 수 없기 때문입니다. 그러나 각각에 대해 고유한 키를 제공하여 서로 다른 조직을 구분하도록 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을 사용하는 대신 기존 원격의 호스트 이름을 각각과 함께 대체하여 각 리포지토리에 대해 이러한 URL을 원격으로 사용하려는 경우 Git에 알릴 수 있습니다 devops_fabrikam
devops_contoso
. 예를 들어 git@ssh.dev.azure.com:v3/Fabrikam/Project1/fab_repo
는 git@devops_fabrikam:v3/Fabrikam/Project1/fab_repo
가 됩니다.
Q: 내 SSH 키에 대해 어떤 알림을 받을 수 있나요?
A: Azure DevOps Services에 새 SSH 키를 등록할 때마다 새 SSH 키가 계정에 추가될 때 알려주는 이메일 알림을 받게 됩니다.
Q: 내 계정에서 다른 사람이 SSH 키를 추가한다고 생각되면 어떻게 해야 하나요?
A: 시작하지 않은 SSH 키 등록 알림을 받으면 자격 증명이 손상될 수 있습니다.
다음 단계는 암호가 손상되었는지 여부를 조사하는 것입니다. 암호 변경은 항상 이 공격 벡터를 방어하는 좋은 첫 번째 단계입니다. Microsoft Entra 사용자인 경우 관리자에게 문의하여 알 수 없는 원본/위치에서 계정이 사용되었는지 확인합니다.
Q: 암호를 GIT_SSH_COMMAND="ssh -v" git fetch
no mutual signature algorithm
corresponding algo not in PubkeyAcceptedAlgorithms
입력하라는 메시지가 계속 표시되면 어떻게 해야 하나요?
A: Fedora Linux와 같은 일부 Linux 배포판에는 Azure DevOps가 지원하는 것보다 더 강력한 SSH 서명 알고리즘이 필요한 암호화 정책이 있습니다(2021년 1월 현재). 이 지원을 추가하기 위한 열린 기능 요청 이 있습니다.
SSH 구성(~/.ssh/config
)에 다음 코드를 추가하여 문제를 해결할 수 있습니다.
Host ssh.dev.azure.com vs-ssh.visualstudio.com
PubkeyAcceptedKeyTypes +ssh-rsa
팁
Azure DevOps Server 및 TFS의 자체 호스팅 인스턴스의 경우 줄에서 ssh.dev.azure.com vs-ssh.visualstudio.com
적절한 호스트 이름을 Host
대신 사용합니다.