본문 바로가기
6. 개발도구/6_3 GIT

[Git (7)] Github 비밀번호 입력 없이 pull/push 하기(github ssh key 설정)

by 갓대희 2020. 5. 18.
반응형

[Git (7)] Github 비밀번호 입력 없이 pull/push 하기(github ssh key 설정)

안녕하세요. 갓대희 입니다. 이번 포스팅은 [ GitHub ID, Password 입력없이 pull, push 하기 입니다. : ) 

 

 

0. 들어가기 앞서

▶ 1. SSH Key 생성 목적

Git 원격 저장소에 Push나 Pull을 할때 매번 패스워드를 묻게 되는데 이 과정을 SSH Key 생성을 통해 생략할 수 있다.

 

이와 같은 니즈가 발생하는 케이스는 다양할 것이다.

 

1. 사용자 비밀번호 입력 방식보다 높은 수준의 보안을 필요로 할 때 필요하다.
2. 젠킨스 등의 CI툴로 배포 자동화를 할때 등 사용자 계정 입력을 자동화 하여야 할 때 필요하다.

3. GitHub 계정이 2FA(Two-Factor Authentication)에 의해 이중 인증이 필요한 상황이 생길때 필요하다.

등등.

 

▶ 2. SSH Key란?

1) SSH(Secure Shell Protocol)

 - 암호화된 원격 접속 프로토콜

 - 즉 컴퓨터와 컴퓨터가 인터넷과 같은 Public Network를 통해 서로 통신을 할 때 보안적으로 안전하게 통신을 하기 위해 사용하는 접속 프로토콜

 

2) SSH Key

 - SSH 프로토콜로 서버에 접속 시 서버에 비밀번호 대신 key를 제출하는 방식이다.

 

그럼 Git SSH Key를 만들어 보고, 이를 GitHub에 등록 하는 방법을 지금부터 알아 보도록 하자.

 

1. Git SSH Key 생성

▶ 1. SSH Key 파일 확인

 - 일반적으로 SSH Key는 ~/.ssh 경로에 존재한다.

 - 기존 생성해 놓은 키가 있다면 .pub 파일등과 같은 키파일이 있고 다음 명령어를 통해 확인해보자. (생성된 키가 없다는 가정하에 작성 하였다.)

# ls -al ~/.ssh

 - 해당 명령어를 통해 키 생성을 진행한 적이 있다면 다음과 비슷한 구조로 키파일을 확인할 수 있을 것이다.

 

 - 혹시 디렉토리가 없는 경우는 다음과 같이 생성한다.

# mkdir ~/.ssh
# chmod 700 ~/.ssh
# cd ~/.ssh

▶ 2. SSH Key 생성 하기

 - Unix 계열(리눅스, 맥)에서는 ssh-keygen이라는 프로그램을 이용하여 생성 가능하다.

 

1) 다음 명령어를 입력 한다.

   (메일 계정은본인 git계정에 등록한 이메일 주소를 써주도록 하자.)

# ssh-keygen -t rsa -b 4096 -C "yourEmail@example.com"

※ 참고

 - t  rsa는 rsa라는 암호화 방식으로 키를 생성한다는 의미다.

 - SSH 키는 키 크기가 2048비트 또는 4096비트인 RSA 키여야 한다. 나와 같은 경우는 4096으로 지정하였다.

 

2) 다음과 같이 나오면 엔터를 입력 한다.

   (특정 경로 지정이 필요한 경우 절대 경로 입력하면 적용 가능하다. 나와 같은 경우는 디폴트 경로 사용)

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

 

3) 사용자 키의 암호(Passphrase) 설정도 자동 로그인을 사용하려면 입력하지 않고 엔터를 입력 한다.

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

 

 - 즉 키 생성 될때까지 엔터를 입력 하면 된다.

 

4) 다음과 같은 결과 화면과 함께 키 생성이 완료 되었다. 

Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:qYWyFlIUh/DxwRyzRj961ymIFyhgKchwpAy10YJcIIm your_email@example.com
The key's randomart image is:
+---[RSA 4096]----+
|     =+. . o     |
|    +.= E = .    |
|   o + * * .     |
|    . * * o      |
| .. o=..S+       |
|o .o =+.o        |
| *. o... .       |
|o=+..o           |
|=o+++.o.         |
+----[SHA256]-----+

※ 참고

 - 혹시 실수로 비밀번호를 생성한 경우 다음 명령어로 비밀번호를 재생성 하는 명령어 입력 후 엔터로 넘어 가도록 하자.

 - 물론 키를 삭제하고 다시 생성할수도 있긴하지만 번거로울 것이다.

# ssh-keygen -p

 

5) 생성된 키파일을 확인해 보자.

# ls -al

-rw------- 1 root root  391 May  2 08:14 authorized_keys
-rw------- 1 root root 3326 May 12 03:56 id_rsa
-rw-r--r-- 1 root root  745 May 12 03:56 id_rsa.pub

5.1) authorized_keys

 - id_rsa.pub 키의 값을 저장 한다.

5.2) id_rsa

 - 개인키, 타인에게 노출되면 안되는 private key 이다. 본인의 컴퓨터 내부에 저장하게 되어 있으며, 이 Private Key를 통해 암호화된 메시지를 복호화 할 수 있다.

5.3) id_rsa.pub

 - public key, 공개되어도 비교적 안전한 Key이다. Public Key를 통해 메시지를 전송하기 전 암호화를 하게 된다.

 - Public Key로는 복호화는 불가능 하다.

 - 접속하려는 Remote Machine의 authorized_keys에 입력하여 사용한다.

 

6) ssh-agent 실행 여부 확인

 - ssh-agent가 정상 실행중인지 확인 해본다.

 - “Agent pid xxxxx” 과 같은 문장이 출력된다면 정상적으로 실행 중이다.

# eval "$(ssh-agent -s)"

Agent pid 26191

▶ 3. SSH-Agent에 SSH Key 등록 하기

 - ssh-add 명령어를 사용하여 생성한 SSH-Key 파일을 ssh-agent에 등록한다.

# ssh-add ~/.ssh/id_rsa

Enter passphrase for /root/.ssh/id_rsa:
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
2. Github에 공개키(id_rsa.pub) 등록 하기

▶ 1. SSH Key 파일 확인

1) GitHub 설정 페이지로 이동 및 로그인

 - github.com/login

 

2) settings 클릭

3) SSH and GPG keys > New SSH Key 클릭

4) SSH 공개키(id_rsa.pub) 등록

 - Title : 사용자 지정 키이름

 - Key : 공개 키 내용

확인 방법1) cat(또는 vi) ~/.ssh/id_rsa.pub

확인 방법2) bcopy < ~/.ssh/id_rsa.pub

 - 입력 완료 후 'Add SSH Key' 버튼 클릭하여 등록 완료.

▶ 2. GitHub 설정 변경

 - 기존에는 HTTPS 접근 방식을 사용하여 GitHub 저장소에 접근 하였을 것이다.

1) Use SSH 클릭하여 변경 후, URL(git@github.com:[계정명]/[저장소명].git)을 복사 한다. 

2) SSH 접속 방법을 사용하여 GitHub 저장소에 접근할 수 있도록 Git 설정을 변경해준다.

 - git init을 할 경로로 이동 한다.

 - git remote 명령어로 remote 정보를 갱신 한다.

# git remote add origin git@github.com:[계정명]/[저장소명].git

 - 혹시 이미 https 로 연결한 경우 기존 리파지토리 remote를 제거 한다.

# git remote show
origin

# git remote remove origin
# git remote add origin git@github.com:[계정명]/[저장소명].git
# git remote show

 - 이후 git add, commit, push를 해보면 별도의 계정, 비밀번호 입력 없이 정상 처리되는 것을 볼 수 있다.

반응형

댓글8

  • Favicon of https://kibua20.tistory.com BlogIcon Kibua20 2020.07.13 21:28 신고

    유익한 글 감사합니다. 구독눌렸습니다.
    ssh 로그인하지 않고, http 로 github에 로그인 하는 경우 ID와 패스워드 자동입력이 가능한가요?
    답글

    • Favicon of https://goddaehee.tistory.com BlogIcon 갓대희 2020.07.26 17:44 신고

      아. 네. 머 그런 고민들 해결할 수 있는 방법들은 많을거예요.
      어떤 목적과 환경? (ex, 저와 같은 경우 리눅스로, 그리고 젠킨스로 자동 배포를 위해 자동 로그인 처리 했습니다.)
      인지에 따라 방법을 찾아보시면 될 것 같네요~!

  • Favicon of https://kibua20.tistory.com BlogIcon Kibua20 2020.07.26 17:48 신고

    네 감사합니다.
    답글

  • Favicon of https://zagg2732.tistory.com BlogIcon Zagg2732 2020.09.03 18:27 신고

    모든글들이 다 도움이 크게되었습니다. 다른 글들은 다들 Mac 기준으로 작성되어 있어서 저같은 Windows 유저한테는 불편했는데 이 글을 찾은게 행운이네요. 감사합니다
    답글

  • 아커 2021.04.19 17:02

    https 사용하다가 ssh로 바꾸고 헤맸는데 감사합니다 !
    답글

    • Favicon of https://goddaehee.tistory.com BlogIcon 갓대희 2021.04.20 00:04 신고

      가끔 문제가 생겼을때 이런 방법을 통해 해결할 수 있는 경우가 있더라구요..ㅋㅋ
      즐거운 하루 보내세요~!