# 개요

Cloning into 'git-flow-test'...
Username for 'https://github.com': devvace
Password for 'https://devvace@github.com': 
remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/adapfit-lab/git-flow-test.git/'

Private 저장소를 Clone해서 가져오려고 했더니 나타나는 메시지이다.

2021년 8월 13일부터 비밀번호 인증이 removed 라고 한다. 이제는 Private 저장소를 가져오기 위해서는 SSH와 같이 보안이 적용된 방법을 사용해야한다.

# SSH 공개키/개인키 만들기

SSH를 사용하기 위해서는 공개키와 개인키를 만들어야한다.

다음의 명령어를 이용해 이전에 만든적이 있는지 확인해보자

% cd ~/.ssh

따로 위치를 지정해주지 않은 이상 기본 위치는 ~/.ssh 이곳이다.

아무것도 없다면 다음의 명령어를 이용해서 키를 만들어보자

% ssh-keygen -t ed25519 -C "your_email@example.com"

ED25519 방식이 싫다면 RSA알고리즘을 이용해 키 생성을 할 수도 있다.

% ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

먼저 키 파일을 어디에 저장할지에 대해 지정할 수 있다.

그냥 Enter 키를 눌러서 Default 위치(/Users/[계정]/.ssh)에 저장하자.

Enter file in which to save the key (/Users/[계정]/.ssh/id_ed25519): 
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

그리고 비밀번호를 입력해주자.

비밀번호를 입력하지 않고 Enter키를 눌러도 되는데, Github에서도 비밀번호를 입력하도록 권장한다.

Your identification has been saved in /Users/[계정]/.ssh/id_ed25519
Your public key has been saved in /Users/[계정]/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:IegR1G225Di4WohvH1Rb892sA2LZC3rpCERxpz7q2KU your_email@example.com
The key's randomart image is:
+--[ED25519 256]--+
|.o.+.o           |
| .* Oo           |
|oo Xoo. .        |
|B =..... .       |
|=O *.   S        |
|+.@ *            |
| = =.*           |
|o.oo. *          |
|..E  o .         |
+----[SHA256]-----+

생성 완료!

생성된 공개키와 개인키를 확인해보면?

% cd ~/.ssh
% ls
id_ed25519	id_ed25519.pub

id_ed25519가 개인키이고, id_ed25519.pub이 공개키이다.

말그대로 공개키는 공개되어도 되는 키이고, 개인키는 공개되어서는 안 된다.

# 공개키 등록

이제 Github에는 공개키를 등록해줘야 한다.

Github에 로그인 후 계정의 Settings 메뉴를 선택하자.

그리고 SSH and GPG keys 메뉴를 선택 후 New SSH key를 선택하자.

이제 공개키를 등록하면 되는데, 아까 전에 생성한 공개키를 복사하도록 하자.

본인이 Windows를 사용한다면 clip, macOS를 사용한다면 pbcopy 명령어를 사용하면 파일 안에 있는 내용을 복사할 수 있다.

$ pbcopy < ~/.ssh/id_ed25519.pub

복사한 내용을 붙여넣고, Add SHH key 버튼을 누르자.

생성 완료!

# SSH 접속 설정

~/.ssh/config 파일 아래에 다음의 내용을 추가하자.

Host github.com
  IdentityFile ~/.ssh/id_ed25519
  User git

이후 다음 명령어로 테스트해볼 수 있다.

비밀번호를 입력하는 창에는 Key 생성시 작성한 비밀번호를 넣으면 된다.

% ssh -T git@github.com
Enter passphrase for key '/Users/[계정]/.ssh/id_ed25519': 
Hi [Github 계정 아이디]! You've successfully authenticated, but GitHub does not provide shell access.

※ 참고: Multi Account 사용하기

보통 하나의 데스크톱 또는 노트북에서 하나의 계정을 사용하면 간단하지만, 상황에 따라 Mutli 계정을 사용해야할 수도 있다.

GitHub 멀티 어카운트를 사용할 때 유용한 Git 설정
개발 환경에서 GitHub 단일 계정을 사용할 때는 문제가 없습니다만, 멀티 계정을 사용하면 이야기가 달라집니다. 이 글에서는 커밋 정보에 기록하는 사용자 정보나 계정 별로 SSH 인증하는 방법 등 멀티 어카운트를 사용할 대 유용한 설정들을 소개합니다.
https://www.lainyzine.com/ko/article/useful-git-settings-when-using-github-multi-account/

추가로 사용할 계정의 Private 및 Public key를 생성하고, config 파일(~/.ssh 안에 위치)을 수정하면 된다.

# Example
Host github-company
  User git
  Port 22
  HostName github.com
  IdentityFile ~/.ssh/id_ed25519-lainyzine-company

Host github-personal
  User git
  Port 22
  HostName github.com
  IdentityFile ~/.ssh/id_ed25519-lainyzine-personal

그리고, 공개키 등록 절차를 통해 새로 생성한 공개키를 등록하고, git remote add 명령어를 사용해서, 활성화할 유저를 입력하면 된다.

$ git remote add origin git@github-company:lainyzine/lainyzine.git

git@ 뒤에 붙은 github-company 값을 잘 입력하자.

이후 git push를 진행하면 된다.

※ 참고: remote: error: GH007: Your push would publish a private email address.

Github > User Settings > Emails > Block command line pushs that expose my email 체크 여부를 살펴보고 체크되어있으면 해제하자.

# Git clone

자 이제 대망의 Private 저장소 Clone을 해보자,

% git clone git@github.com:test/git-flow-test.git
Cloning into 'git-flow-test'...
The authenticity of host 'github.com (20.200.245.247)' 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])? yes
Warning: Permanently added 'github.com' (ED25519) to the list of known hosts.
Enter passphrase for key '/Users/devace/.ssh/id_ed25519': 
remote: Enumerating objects: 7, done.
remote: Counting objects: 100% (7/7), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 7 (delta 1), reused 5 (delta 0), pack-reused 0
Receiving objects: 100% (7/7), done.
Resolving deltas: 100% (1/1), done.

끝!