GitLab에 SSH Key 등록

GitLab은 SSH 키를 사용하여 Git과 서버 간의 보안 통신을 지원합니다. SSH 프로토콜은 이 보안을 제공하며 매번 username이나 비밀번호를 제공하지 않고도 GitLab 원격 서버에 인증할 수 있습니다.

SSH를 지원하려면 GitLab은 OpenSSH 클라이언트 설치를 필요로 합니다. Windows 10뿐만 아니라 GNU/Linux 및 macOS에는 사전 설치되어 제공됩니다. 시스템에 SSH 버전 6.5 이상이 포함되어 있는지 확인하십시오. 현재 안전하지 않은 MD5 서명 체계는 제외됩니다. 다음 명령은 시스템에 설치된 SSH 버전을 반환합니다.

ssh -V

GitLab은 Microsoft Windows에서의 설치를 지원하지 않지만, SSH 키를 설정하여 Windows를 클라이언트로 설정할 수 있습니다.

SSH 키 옵션

GitLab은 RSA, DSA, ECDSA 및 ED25519 키 사용을 지원합니다.

  • GitLab은 GitLab 11.0에서 DSA 키를 더 이상 사용하지 않습니다.
  • Practical Cryptography With Go에서 언급했듯이 DSA와 관련된 보안 문제는 ECDSA에도 적용됩니다.

참고 : 사용 가능한 문서는 ED25519가 더 안전하다고 제안합니다. RSA 키를 사용하는 경우, 미국 국립 과학 기술 연구소는 간행물 800-57 Part 3 (PDF)에서 최소 2048비트의 키 사이즈를 권장합니다.

따라서, 본 문서는 ED25519 및 RSA 키 사용에 중점을 둡니다.

기존 SSH 키 검토

기존 SSH 키가 있는 경우, 이를 사용하여 GitLab 리포지터리와의 보안 연결을 지원할 수 있습니다. 기본적으로 Linux 및 macOS 시스템의 SSH 키는 사용자의 home 디렉터리에 있는 .ssh/ 하위 디렉터리에 저장됩니다. 다음 표에는 각 SSH 키 알고리즘에 대한 기본 파일 이름이 포함되어 있습니다.

AlgorithmPublic keyPrivate key
ED25519 (권장)id_ed25519.pubid_ed25519
RSA (최소 2048비트 키 크기)id_rsa.pubid_rsa
DSA (지원 중단됨)id_dsa.pubid_dsa
ECDSAid_ecdsa.pubid_ecdsa

새로운 SSH 키 페어 생성

ED25519 SSH 키

Practical Cryptography With Go라는 책은 ED25519 키가 RSA 키보다 더 안전하고 성능이 뛰어나다고 제안합니다. OpenSSH 6.5는 2014년에 ED25519 SSH 키를 도입했으므로, 현재 운영 체제에서 사용할 수 있습니다.

다음 명령을 사용하여 ED25519 키를 만들고 구성할 수 있습니다.

ssh-keygen -t ed25519 -C "<comment>"

이메일 주소와 같은 인용부호(“)로 감싼 코멘트를 함께 사용하는 -C 플래그는 SSH 키에 레이블을 지정하는 선택적 방법입니다.

다음과 유사한 응답이 표시됩니다.

Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/user/.ssh/id_ed25519):

이후 아래에 있는 SSH 키 페어를 생성하는 공통 단계에 따라 진행하세요.

RSA SSH 키

SSH에 RSA 키를 사용하는 경우, US National Institute of Standards and Technology에서는 최소 2048비트의 키 사이즈를 사용하도록 권장합니다. 기본적 ssh-keygen 명령은 1024비트 RSA 키를 만듭니다.

다음 명령을 사용하여 RSA 키를 만들고 구성할 수 있습니다. 필요한 경우 최소 권장 키 사이즈인 2048을 대체합니다.

ssh-keygen -t rsa -b 2048 -C "email@example.com"

이메일 주소와 같은 인용부호(“)로 감싼 코멘트를 함께 사용하는 -C 플래그는 SSH 키에 레이블을 지정하는 선택적 방법입니다.

다음과 유사한 응답이 표시됩니다.

Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):

이후 아래에 있는 SSH 키 페어를 생성하는 공통 단계에 따라 진행하세요.

참고 : OpenSSH 버전 7.8 이하를 사용하는 경우, 인코딩과 관련된 문제를 고려하십시오.

SSH 키 페어를 생성하는 공통 단계

ED25519 키를 생성하든 RSA 키를 생성하든, ssh-keygen 명령으로 시작했습니다. 이 시점에서 명령줄에 다음 메시지가 표시됩니다(ED25519 키의 경우).

Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/user/.ssh/id_ed25519):

SSH 키 페어가 아직 없고 배포 키를 생성하지 않는 경우, 제안된 파일 및 디렉터리를 수락합니다. SSH 클라이언트는 추가 구성없이 결과 SSH 키 페어를 사용합니다. 또는 새 SSH 키 페어를 다른 위치에 저장할 수 있습니다. 원하는 디렉토리와 파일 이름을 지정할 수 있습니다. 해당 SSH 키 페어를 특정 호스트 전용으로 지정할 수도 있습니다.

SSH 키를 저장할 파일을 지정한 후, SSH 키에 대한 문장형 암호(passphrase)를 설정할 수 있습니다.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

성공하면, ssh-keygen 명령이 ID와 개인 키를 저장한 위치에 대한 확인이 표시됩니다.

필요한 경우, 다음 명령을 사용하여 패스프레이즈(passphrase)를 업데이트할 수 있습니다.

ssh-keygen -p -f /path/to/ssh_key

RSA 키 및 버전 6.5에서 7.8까지의 OpenSSH

OpenSSH 7.8 이전에는 RSA 키의 기본 공개 키 지문이 MD5를 기반으로 했기 때문에 안전하지 않습니다.

OpenSSH 버전이 6.5에서 7.8 (포함) 사이에 있는 경우, -o 옵션과 함께 ssh-keygen를 실행하여 개인 SSH 키를 보다 안전한 OpenSSH 형식으로 저장하십시오.

GitLab에서 사용할 RSA SSH 키 페어가 이미 있는 경우, 더 안전한 암호 암호화 형식을 사용하도록 업그레이드하는 것이 좋습니다. 다음 명령을 사용하여 수행할 수 있습니다.

ssh-keygen -o -f ~/.ssh/id_rsa

또는 다음 명령을 사용하여 보다 안전한 암호화 형식으로 새 RSA 키를 생성할 수 있습니다.

ssh-keygen -o -t rsa -b 4096 -C "email@example.com"

참고 : ssh-keygen man(매뉴얼) 페이지에서 언급했듯이, ED25519는 이미 더 안전한 OpenSSH 형식으로 키를 암호화합니다.

GitLab 계정에 SSH 키 추가

이제 생성한 SSH 키를 GitLab 계정에 복사할 수 있습니다. 이렇게 하려면 다음 단계를 따르십시오.

  1. 정보를 텍스트 형식으로 저장하는 위치에 public SSH 키를 복사합니다. 다음 옵션은 ED25519 키에 대한 정보를 해당 운영 체제의 클립 보드에 저장합니다.
    macOS :
pbcopy < ~/.ssh/id_ed25519.pub

Linux (xclip 패키지 필요) :

xclip -sel clip < ~/.ssh/id_ed25519.pub

Windows의 Git Bash :

cat ~/.ssh/id_ed25519.pub | clip

RSA 키를 사용하는 경우, 그에 따라 대체하십시오.

  1. GitLab 인스턴스 URL로 이동하여 로그인합니다.
  2. 오른쪽 상단에서 아바타를 선택하고 Settings을 클릭합니다.
  3. SSH Keys를 클릭합니다.
  4. 복사한 공개 키를 Key 텍스트 박스에 붙여 넣습니다.
  5. Title 텍스트 박스에 Work Laptop 또는 Home Workstation과 같은 설명 이름이 포함되어 있는지 확인하십시오.
  6. "Expires at" 섹션 아래에 키의 만료일(선택 사항)을 포함합니다. ( GitLab 12.9에서 도입됨)
  7. Add key 버튼을 클릭합니다.

이 절차를 사용하여 "만료"된 SSH 키는 GitLab 워크플로우에서 유효합니다. GitLab에서 구성한 만료 날짜는 SSH 키 자체에 포함되어 있지 않으므로, 필요에 따라 공개 SSH 키를 계속 내보낼 수 있습니다.

참고 : 공개 SSH 키를 수동으로 복사한 경우, ssh-ed25519(또는 ssh-rsa)으로 시작하고 이메일 주소로 끝나는 전체 키를 복사했는지 확인하십시오.

모든 것이 올바르게 설정되었는지 테스트

SSH 키가 올바르게 추가되었는지 테스트하려면, 터미널에서 다음 명령을 실행합니다.

ssh -T gitlab@example.com

SSH를 통해 GitLab에 처음 연결할 때, 연결 중인 GitLab 호스트의 신뢰성을 확인해야 합니다. 예를 들어, example.com에 연결할 때, 신뢰할 수 있는 호스트 목록에 example.com을 추가하려면 yes로 응답하십시오.

The authenticity of host 'example.com (35.231.145.151)' can't be established.
ECDSA key fingerprint is SHA256:HbW3g8zUjNSksFbqTiUWPWg2Bq1x8xdGUrliXFzSnUw.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'example.com' (ECDSA) to the list of known hosts.

알려진 호스트 목록에 추가되면, GitLab 호스트의 신뢰성을 다시 한번 확인해야 합니다. 다시 위의 명령을 실행하고 Welcome to GitLab, @username! 메시지를 받아야 합니다.

환영 메시지가 나타나지 않으면, 다음 명령을 사용하여 상세 모드에서 ssh를 실행하여 문제를 해결할 수 있습니다.

ssh -Tvvv gitlab@example.com

기본이 아닌 SSH 키 페어 경로로 작업하기

GitLab SSH 키 페어에 기본이 아닌 파일 경로를 사용한 경우, GitLab 개인 SSH 키를 가리 키도록 SSH 클라이언트를 구성합니다.

이러한 변경을 수행하려면 다음 명령을 실행하십시오.

eval $(ssh-agent -s)
ssh-add <path to private SSH key>

이제 이러한 설정을 ~/.ssh/config 파일에 저장하십시오. 다음은 GitLab 전용 SSH 키의 두 가지 예입니다.

# GitLab.com
Host gitlab.com
Preferredauthentications publickey
IdentityFile ~/.ssh/gitlab_com_rsa

# Private GitLab instance
Host gitlab.company.com
Preferredauthentications publickey
IdentityFile ~/.ssh/example_com_rsa

공개 SSH 키는 계정에 바인딩되므로, GitLab에 고유해야 합니다. SSH 키는 SSH를 통해 코드를 푸시할 때 사용할 수 있는 유일한 식별자이므로, 단일 사용자에게 고유하게 매핑해야 합니다.