본문 바로가기
카테고리 없음

[WSL/Github] WSL에 git clone하기 위 github랑 WSL연결하는 법

by sighan 2023. 12. 24.
반응형

WSL (Windows Subsystem for Linux)을 GitHub에 연결하는 과정은 몇 가지 기본 단계를 포함합니다. 이 과정은 기본적으로 GitHub 계정을 가지고 있고 WSL 환경에 접근할 수 있다고 가정합니다.

 

 

 

1. Git 설치되어있는 지 확인: WSL 터미널에서 다음 명령어를 이용해서 버전이 표시된다면 4단계를 생략하세요.

git --version

 

 

2. Git 설치: WSL에서 Git이 설치되어 있지 않다면 설치하세요. 대부분의 Linux 배포판에서는 다음 명령어로 설치할 수 있습니다. 

sudo apt update
sudo apt install git
더보기

apt를 사용하여 Linux 시스템에 Git 또는 기타 소프트웨어를 설치할 때는 먼저 sudo apt 업데이트를 실행하는 것이 중요합니다. 그 이유는 다음과 같습니다:

패키지 인덱스 업데이트: sudo apt 업데이트는 사용 가능한 패키지 목록과 해당 버전을 업데이트하지만 패키지를 설치하거나 업그레이드하지는 않습니다. 이렇게 하면 시스템에서 최신 버전의 패키지와 사용 가능한 새 패키지에 대해 알 수 있습니다.

최신 버전 보장: 업데이트를 먼저 실행하면 Git을 설치할 때(sudo apt install git) 배포의 리포지토리에서 사용 가능한 최신 버전을 얻을 수 있습니다.

종속성 해결: 또한 Git에 있을 수 있는 모든 종속성을 해결하여 원활한 설치 프로세스를 보장합니다.

따라서 sudo apt 업데이트는 시스템의 패키지 데이터베이스를 최신 상태로 유지하여 새 소프트웨어를 보다 원활하고 안전하게 설치할 수 있도록 하는 준비 단계입니다.

Translated with DeepL.com (free version)

 

 

3. Git 구성: Git에 사용자 이름과 이메일을 설정하세요. 이 정보는 커밋에 사용됩니다.

git config --global user.name "your_username"
git config --global user.email "your_email@example.com"

 

설정 후 다음과 같이 명령어를 입력하면 설정한 이름과 이메일을 보여준다.

git config --global user.name
git config --global user.email

 

 

4. SSH 키 생성 및 추가: GitHub에서 SSH를 사용하여 리포지토리에 접근하려면 SSH 키를 생성하고 GitHub 계정에 추가해야 합니다.

  • SSH 키 생성:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

이 명령은 .ssh 디렉토리에 id_rsaid_rsa.pub라는 두 파일을 생성합니다.

더보기

ssh-keygen -t rsa -b 4096 -C "your_email@example.com" 명령어는 SSH 키를 생성하는 데 사용됩니다. 이 명령어는 특히 안전한 원격 서버 접속을 위해 사용되며, 여기서 각 부분은 다음과 같은 의미를 가집니다:

  1. ssh-keygen: 이것은 SSH 키를 생성하기 위한 프로그램입니다.
  2. -t rsa: 이 옵션은 키의 타입을 지정합니다. 여기서 'rsa'는 현재 가장 널리 사용되는 키 타입 중 하나입니다.
  3. -b 4096: 이것은 키의 비트 길이를 설정합니다. 4096비트는 매우 강력한 보안 수준을 제공합니다. 기본값은 보통 2048비트입니다.
  4. -C "your_email@example.com": 이것은 키에 주석을 추가하는 것입니다. 주석은 키를 식별하는 데 도움이 되며, 일반적으로 사용자의 이메일 주소를 사용합니다. 이것은 보안과는 직접적인 관련이 없으며, 키 관리를 용이하게 하기 위한 것입니다.

이 명령을 실행하면, 시스템은 두 개의 키 파일을 생성합니다: 하나는 개인 키(private key, 일반적으로 id_rsa라고 명명됨), 다른 하나는 공개 키(public key, id_rsa.pub라고 명명됨). 개인 키는 절대로 다른 사람과 공유하지 말아야 하며, 공개 키는 원격 서버에 복사하여 SSH 접속 시 인증에 사용됩니다.

 

 

RSA는 암호화 알고리즘의 한 종류로, 이름은 이 알고리즘을 처음 제안한 세 사람의 성(Rivest, Shamir, Adleman)의 첫 글자를 따서 만들어졌습니다. RSA는 공개 키 암호화 방식을 사용하는데, 이는 다음과 같은 두 가지 주요 개념을 포함합니다:

  1. 공개 키(Public Key): 이 키는 암호화에 사용됩니다. 누구나 이 공개 키를 사용하여 메시지를 암호화할 수 있으며, 암호화된 메시지는 오직 해당 공개 키와 짝을 이루는 개인 키로만 복호화할 수 있습니다. 공개 키는 안전하게 공유될 수 있으며, 종종 인증서와 함께 사용됩니다.
  2. 개인 키(Private Key): 이 키는 복호화에 사용됩니다. 개인 키는 보안을 유지하기 위해 비밀리에 보관되어야 하며, 공개 키로 암호화된 메시지를 복호화하는 데 사용됩니다.

RSA 알고리즘의 보안성은 큰 소수를 곱하는 것이 쉽지만, 그 곱셈의 결과(즉, 큰 합성수)를 소인수분해하는 것이 매우 어렵다는 수학적 원리에 기반합니다. 이 특성 때문에, RSA는 매우 강력한 암호화 방식으로 폭넓게 사용되고 있습니다. RSA는 디지털 서명, 데이터 암호화, SSL/TLS와 같은 보안 프로토콜에서 중요한 역할을 합니다.

 

SSH 키 생성 과정:

다음과 같이 물어보면 그냥 enter 치시면 됩니다. 

Generating public/private rsa key pair.
Enter file in which to save the key (/home/"사용자 이름"/.ssh/id_rsa):
더보기
  1. 기본 경로와 파일 이름: /home/"사용자 이름"/.ssh/id_rsa는 기본적으로 제안되는 경로와 파일 이름입니다. 여기서 "사용자 이름" 는 사용자의 홈 디렉토리 이름을 나타냅니다. .ssh 디렉토리는 SSH 키와 관련된 파일들을 저장하기 위한 표준 위치입니다. id_rsa는 개인 키의 기본 파일 이름입니다.
  2. 기본값 사용하기: 이 경로와 파일 이름을 그대로 사용하려면, 그냥 엔터키를 누르면 됩니다. 이렇게 하면 키가 기본 위치에 저장됩니다.
  3. 다른 경로나 파일 이름 선택하기: 다른 위치에 키를 저장하고 싶거나 파일 이름을 변경하고 싶다면, 원하는 전체 경로와 파일 이름을 입력하면 됩니다. 예를 들어, /home/ "사용자 이름" /.ssh/my_custom_key와 같이 입력할 수 있습니다.

키를 저장한 후에는 키 파일의 위치를 기억해야 하며, SSH 클라이언트 설정이나 서버에 키를 복사할 때 해당 경로를 사용해야 합니다. 또한, 여러 SSH 키를 가지고 있을 경우에는 각 키를 구별할 수 있는 파일 이름을 사용하는 것이 좋습니다.

 

다음과 같이 물어보는 것도 전부 다 enter 치시면 됩니다.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:
더보기

이 단계에서 SSH 키에 대한 패스프레이즈(passphrase)를 설정하는 것을 요구하고 있습니다. 패스프레이즈는 추가적인 보안 수준을 제공합니다. 여기서 선택할 수 있는 옵션은 다음과 같습니다:

  1. 패스프레이즈 설정하기: 강력한 패스프레이즈를 입력하여 개인 키를 보호할 수 있습니다. 이 패스프레이즈는 키를 사용할 때마다 입력해야 합니다. 패스프레이즈는 개인 키가 무단으로 사용되는 것을 방지하는 데 도움이 됩니다. 예를 들어, 누군가가 물리적으로 또는 디지털적으로 귀하의 키에 접근하더라도 패스프레이즈 없이는 키를 사용할 수 없습니다.
  2. 패스프레이즈 없이 설정하기: 패스프레이즈를 설정하지 않으려면, 아무 것도 입력하지 않고 엔터키를 누르면 됩니다. 이 경우, 키는 추가적인 보안 요소 없이 사용될 수 있습니다. 이는 사용 편의성을 높이지만, 키가 노출될 경우 보안 리스크가 증가합니다.

패스프레이즈 설정 여부는 사용 환경과 보안 요구 사항에 따라 결정해야 합니다. 높은 보안이 필요한 환경에서는 강력한 패스프레이즈를 설정하는 것이 좋습니다. 반면, 자주 액세스해야 하고 편의성이 중요한 경우에는 패스프레이즈 없이 설정할 수도 있습니다. 단, 이 경우 개인 키의 보안에 더욱 주의를 기울여야 합니다.

 

다음과 같은 문장과 random art 나타나면 키가 생성된 것입니다.

The key's randomart image is:
더보기

이 메시지는 SSH 키 생성 과정의 마지막 부분으로, 실제로 문장 다음줄에는 생성된 키에 대한 "랜덤아트(randomart)" 이미지를 보여줄 것 입니다. 이 랜덤아트 이미지는 SSH 키의 공개 부분에 기반한 시각적 패턴입니다. SSH 키의 랜덤아트 이미지는 다음과 같은 몇 가지 목적을 가지고 있습니다:

  1. 시각적 식별: 랜덤아트는 키를 시각적으로 식별하는 데 도움을 줍니다. 특히, 여러 SSH 키를 다룰 때 각 키를 구별하기 위한 시각적 수단으로 사용될 수 있습니다.
  2. 안전한 키 검증: SSH 키를 교환할 때, 랜덤아트는 공개 키가 중간자 공격에 의해 변경되지 않았는지를 빠르게 확인하는 데 사용될 수 있습니다. 만약 양쪽 끝에서 본 랜덤아트 이미지가 서로 다르다면, 키가 중간에서 변경되었을 수 있음을 나타냅니다.
  3. 비교 용이성: 텍스트 기반의 공개 키보다는 랜덤아트 이미지가 비교하기 더 쉬울 수 있습니다. 특히, 사람들은 복잡한 문자열보다는 시각적 패턴을 기억하고 인식하는 데 더 능숙합니다.

랜덤아트는 SSH 키의 기능성에는 영향을 미치지 않습니다. 즉, 이것은 키의 보안성을 높이거나 낮추지 않으며, 주로 사용자 편의를 위한 시각적 도구로 제공됩니다.

 

생성된 공개키(id_rsa.pub 파일의 내)를 cat 명령으로 출력하고 복사하세요.

cat ~/.ssh/id_rsa.pub

생성된 공개 키(id_rsa.pub 파일)의 내용을 복사합니다. 이 파일에는 GitHub에 추가할 공개 키가 포함되어 있습니다.

 

 

GitHub 계정 설정:

  • GitHub에 로그인합니다.
  • 오른쪽 상단의 프로필 사진을 클릭한 후, "Settings(설정)"를 선택합니다.
  • 왼쪽 사이드바에서 "SSH and GPG keys"를 클릭합니다.
  • "New SSH key" 또는 "Add SSH key"를 클릭합니다.

 

키 추가:

  • "Title(제목)" 필드에 키의 이름을 입력합니다. 이 이름은 키를 식별하는 데 사용되며, 어떤 용도로 키를 사용할지 설명하는 것이 좋습니다.
  • Key type은 authentication Key로 설정하세요.
  • "Key(키)" 필드에 복사한 공개 키를 붙여넣습니다.
  • "Add SSH key(SSH 키 추가)"를 클릭합니다.
더보기

서명 키(Signing Key) 사용 예시

상황: 오픈 소스 소프트웨어 개발자인 Alice가 GitHub에서 자신의 프로젝트 코드를 관리하고 있습니다.

  • 목적: Alice는 새로운 버전의 소프트웨어를 릴리스하기 전에, 다운로드한 사용자들이 정확히 그녀가 작성한 코드를 받고 있다는 것을 확신할 수 있도록 하고 싶습니다.
  • 행동: Alice는 서명 키를 사용하여 소프트웨어 릴리스에 디지털 서명을 합니다. 이 서명은 소프트웨어가 변경되지 않았으며, 실제로 Alice에 의해 작성되었다는 것을 증명합니다.
  • 결과: 사용자들은 Alice의 공개 키를 사용하여 소프트웨어의 서명을 검증할 수 있습니다. 서명이 유효하다면, 그들은 소프트웨어가 안전하고 신뢰할 수 있다고 확신할 수 있습니다.

인증 키(Authentication Key) 사용 예시

상황: Bob은 자신의 웹 서버를 관리하기 위해 SSH를 사용합니다.

  • 목적: Bob은 웹 서버에 안전하게 접속하고, 서버가 실제로 그의 것임을 확인하고 싶습니다.
  • 행동: Bob은 SSH 인증 키를 생성하여 서버에 복사합니다. 그 후, 원격 접속 시 이 키를 사용하여 서버에 로그인합니다.
  • 결과: 서버는 Bob의 인증 키를 확인하여 그의 신원을 검증합니다. 인증이 성공하면, Bob은 서버에 안전하게 접근할 수 있습니다. 이 과정은 HTTPS를 사용하지 않고도 보안된 연결을 보장합니다.

요약

  • 서명 키: 주로 데이터의 무결성과 출처를 보증하는 데 사용됩니다. 예를 들어, 소프트웨어 개발자가 자신의 코드에 디지털 서명을 하는 경우에 사용됩니다.
  • 인증 키: 사용자가 시스템이나 서비스에 자신의 신원을 증명하는 데 사용됩니다. 예를 들어, SSH를 통해 서버에 접속할 때 사용됩니다.

 

 

 

5. SSH 키로 GitHub에 접속 확인: SSH 키가 제대로 작동하는지 확인하기 위해, 터미널에서 GitHub으로 SSH 연결을 시도해 볼 수 있습니다. 다음 명령어를 사용합니다:

ssh -T git@github.com

 

 

다음과 같은 글과 질문이 나타나면 yes를 입력하세요.

The authenticity of host 'github.com (140.82.113.4)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?
더보기

이 메시지는 처음으로 GitHub에 SSH를 통해 연결하려고 할 때 나타나는 것입니다. 여기서 GitHub 서버의 SSH 키 지문(fingerprint)이 표시되고, 이 서버가 신뢰할 수 있는지 여부를 확인하라고 요청하고 있습니다. 이 과정은 SSH의 일반적인 보안 절차의 일부로, Man-In-The-Middle 공격을 방지하기 위해 사용됩니다.

이 메시지의 의미

  • "The authenticity of host 'github.com' can't be established": 당신의 컴퓨터는 github.com의 SSH 키를 인식하지 못하고 있으며, 이것이 실제 GitHub의 서버인지 확신할 수 없다는 의미입니다.
  • "ED25519 key fingerprint is SHA256:...": 이것은 GitHub 서버의 공개 키에 대한 지문입니다. 지문은 공개 키의 요약으로, 특정 서버를 식별하는 데 사용됩니다.
  • "Are you sure you want to continue connecting": 이 서버를 신뢰하고 연결을 계속 진행할 것인지를 묻고 있습니다.

대응 방법

  1. 서버 신뢰성 확인: GitHub의 공식 SSH 키 지문을 웹사이트나 다른 신뢰할 수 있는 출처에서 확인합니다. 이 지문이 메시지에 표시된 지문과 일치하는지 확인해야 합니다.
  2. 연결 수락: 지문이 일치한다면, yes를 입력하여 연결을 수락합니다. 이렇게 하면 GitHub의 키가 당신의 SSH 클라이언트의 알려진 호스트 목록에 추가되고, 다음 연결부터는 이 메시지가 표시되지 않습니다.
  3. 주의: 만약 지문이 일치하지 않는다면, 연결을 수락하지 말고 추가적인 조사를 진행해야 합니다. 지문 불일치는 중간자 공격의 가능성을 나타낼 수 있습니다.

이 단계는 처음 연결을 설정할 때 중요한 보안 절차이므로, 주의 깊게 수행하는 것이 중요합니다

 

터미널에 표시된 SSH 키 지문을 GitHub에 나열된 공식 지문과 비교하여 GitHub 호스트의 진위 여부를 확인할 수 있습니다. 글을 작성하는 시점에서 SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU 지문은 GitHub의 문서에 나열된 Ed25519 키에 해당합니다. 지문이 일치하면 '예'를 입력하여 연결을 계속할 수 있습니다. 이렇게 하면 연결이 안전하게 보호되고 권한이 없는 주체가 연결을 가로채지 못합니다. 자세한 내용과 GitHub의 공개 키 지문 전체 목록을 보려면 GitHub의 SSH 키 지문 설명서를 참조하세요. https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/githubs-ssh-key-fingerprints

 

GitHub's SSH key fingerprints - GitHub Docs

Public key fingerprints can be used to validate a connection to a remote server.

docs.github.com

 

대부분 다 일치하므로 yes 입력하시면 됩니다.

 

다음과 같은 문장이 나오면 성공적으로 연결한 것입니다.

Hi "github 사용자 이름"! You've successfully authenticated, but GitHub does not provide shell access.

 

 

 

6. GitHub 리포지토리 클론: 이제 WSL에서 https 대신 ssh를 사용해서 GitHub 리포지토리를 클론할 수 있습니다.

 

 

예를 들어:

git clone git@github.com:username/repository.git

 

반응형