본문 바로가기
개발환경/git

GitHub 아이디/패스워드 입력 없이 사용하는 방법

by Kibua20 2021. 6. 3.
728x170

GitHub를 사용해서 회사 내에서 다수 인원이 참여하는 SW를 개발하는 경우 Git repository를 제한된 인원에게만 공개하도록 Private으로 설정해야 합니다. Private 설정된 GitHub Repository는  git pull / push 명령어를 사용할 때 마다  ID와 Password를 입력해야 하는 불편함 있습니다. 본 포스팅은 ID와 Password 입력 없이 Git Hub에 로그인 할 수 있는 방법을 정리하였습니다.  참고로, GitHub에 Project 용 Repository를 만들고  멤버 추가하는 내용은 아래 동영상을 확인해주세요.

출처: 생활 코딩 (https://www.youtube.com/watch?v=9TCvmaG0gq8)

 

GitHub에서 아이디/패스워드 입력 없이 사용하는 방법을  요약하면 아래와 같습니다. 

 

Case 1. SSH 연결로 Git clone 하는 경우 

1. SSH Key 인증서 생성후 GitHub에 등록 

2. git clone 명령어 사용 

     $ git clone git@github.com-{your_id}:{your_id}/{repo_name}.git  

 

Case 2. HTTP 연결로 Git clone하는 경우 

     $ git clone https://[ID]:[PASSWORD or Access Token]@github.com/[ID]/myrepo.git

 

 

1. GitHub에 Private Repository 생성

GitHub에서 Repository를 생성할 때 Public과 Private으로 설정할 수 있으며 Private Git을 만든 다음 Project 인원을 추가할 수 있습니다.  GitHub Web 상에서 GUI로 지원되기 때문에 Private Repository는 아래와 같이 쉽게  만들 수 있습니다. 

 

Private Repository 생성

 

 

2. Git 주소 확인하기 (https 와 ssh 연결 확인)

GitHub에서 https 와 ssh 프로토콜을 2개를 모두 지원합니다. git URL 도 다른 방식으로 저장되고,  URL이 ssh 또는 http에 따라서 ID와 Password 인증 방식이 다르기 때문에 각각 맞는 방법으로 설정해야 합니다. Git Hub에서 기본 설정은 https URL 사용하고 있으며 ssh URL로 변환할 수 있습니다. 

 

Git clone 시 SSH URL로 만든 경우라면 Public key를 GitHub 사이트에 등록해야 사용할 수 있습니다. 하지만, 회사 방화벽에서 ssh 연결을 막아 놓은 상태라면 https 연결을 사용해야 합니다.  이 경우 ID에 맞는 ACCESS Token을 할당받아서 git clone 시  URL에 설정하거나, 또는 git crendential cache를 활용할 수 있습니다. 

 

Git URL 확인 방법 (https 와 ssh 주소 확인)

 

 

Password대시 Access Token을 받아서 인증 시 사용할 수 있습니다. Access Token을 받는 방법은 ① 계정 하위 메뉴에서 Setting 선택, ② Settings > Developer Settings에서 Generate Access Token 선택,  ③ Access Token에 이름과 부여할 수 있는 권한을 체크하고 생성하면 Access Key를 생성해줍니다. 생성한 Access Key가 패스워드 대신 사용하면서 만일 유출이 된 경우에는 해당 Key를 삭제할 수 있습니다. 

 

Access Token을 생성 방법

 

2.1. Git을 https URL로 만든 경우  

Git URL은 https://github.com/[소유자 ID]/[Git Repository 이름].git  이며 git clone [URL] 을 실행하면 ID와 password를 입력을 해야 git 복사가 진행됩니다. 

 

   URL: https://github.com/kibua20/PrivateTest.git

HTTP 로 연결 시 ID와 Password 입력

 

2.2. Git을 SSH URL로 만든 경우 - SSH Public key를 Git Hub에 등록

Git URL은 git@github.com:[소유자 ID]/[Git Repository 이름].git  이며,  Public key 등록 안된 상태에서 git clone 하면 "올바른 접근 권한이 있는지, 그리고, 저장소가 있는지 확인하십시오'라는 에러 문구가 나옵니다. 

 

 URL: git@github.com:kibua20/PrivateTest.git   

SSH 로 연결 시 Git 권한 없음 에러 발생

접근 권한을 등록하기 위해서는 ssh public key 생성하고 Git Hub 사이트에 등록을 해야 합니다.  Key 생성은 ssh-keygen을 명령어를 사용하고 Public Key 값 (id_rsa.pub)의 내용을 복사해서 Git Hub의 Respository 1) Setting Menu, 2) Deploy keys, 3) Key, 4) Add Key를 추가합니다.  특정 Repository 에만 권한을 추가하는 경우 'Deploy Key'에 추가하고, 계정 전체에 권한을 부여하는 경우 '프로필> 세팅 메뉴'에 Public key를 추가합니다.  

 

$ ssh-keygen 

$ cat ~/.ssh/id_rsa.pub

 

특정 repository만 SSH Key 등록
계정 전체의 repository만 SSH Key 등록

300x250

 

2.3. git URL 확인 방법 및 https와 ssh 전환  

SSH Public Key 등록한 다음에도 Git clone 시 ID/Password 인증을 요구하는 경우에는 git이 SSH로 생성된 것이 아니고, http로 생성된  경우입니다.  이 경우 현재 git의 URL을 $ git remote -v로  확인하고 SSH URL로 전환시켜줘야 합니다. 

 

(Https로 만든 경우) $ git remote -v
origin https://github.com/kibua20/PrivateTest.git (fetch)
origin https://github.com/kibua20/PrivateTest.git (push)

(SSH로 만든 경우) $ git remote -v
origin git@github.com:kibua20/PrivateTest.git (fetch)
origin git@github.com:kibua20/PrivateTest.git (push)

 

(Https에서 ssh URL로 전환)

$ git remote set-url origin git@github.com:kibua20/PrivateTest.git

 

(ssh에서 https URL로 전환)

git remote set-url origin https://github.com/kibua20/PrivateTest.git 

 

2.4. SSH Key 여러 개 등록  (Repository 별 SSH Key 등록)

Repository 별로 ssh key 값을 여러 개 등록하는 경우 ssh key alias를 활용할 수 있습니다. .ssh/config 파일을 만들어서 Repository 별로 SSH Key을 각각 등록할 수 있습니다.  

 

$ vi ~/.ssh/config

Host project1.github.com

  Hostname github.com

  IdentityFile ~/.ssh/id_rsa.project#1

 

Host project2.github.com

  Hostname github.com

  IdentityFile ~/.ssh/id_rsa.project#2

 

 

2.5 SSH Key 여러 개 등록  (GitHub 계정별 SSH Key 등록)

GitHub에서 SSH Key 등록을 1개만 허용하여 동시에 여러 GitHub 계정을 사용하는 경우 계정별 SSH Key를 등록해야 합니다. 자세한 등록 방법은 아래 포스팅을 확인해주세요. 

 

[개발환경/git] - GitHub “Key is already in use” 에러 방지: SSH public Key 2개 등록하기

 

$ vi ~/.ssh/config

Host github.com-kibua20
  HostName github.com​
  User git​
  IdentityFile ~/.ssh/id_rsa_github

 

# git@github.com-{your_id}:{your_id}/{repo_name}.git  
$ git clone git@github.com-kibua20:kibua20/test.git

3. http URL의 Git 만 사용해야 하는 경우  (ssh 연결이 불가한 경우) 

Git을 ssh URL로 설정하고 SSH Key 값을 등록하면 가장 간단하게 인증을 받을 수 있습니다. 하지만 간혹 회사 방화벽 정책 때문에 SSH 연결이 막아 놓은 경우 있으며 이 경우  https 만 사용해야 합니다. 

 

3.1.   ACCESS TOKEN을 활용 (출처)

git clone 시 http URL에  ID와 Password 추가해서 git을 복사합니다. Password가 cache에 저장되어 노출되는 문제가 점이 있으며, 특히 공용 서버에서 Git을 사용하는 경우 보안 상 문제가 됩니다.  GitHub는 Password 대신  ACCESS TOKEN을 받아서 인증을 받을 수 있으며, 해당 ACCESS Token에는 용도에 맞는 권한만 추가 가능합니다.  특히, Git Hub에서 2FA (Two Factor Authentication)를 설정한 경우에는 반드시 ACCESS TOKEN을 사용해야 합니다.  

 

$ git clone https://[ID]:[PASSWORD or Access Token]@github.com/[ID]/myrepo.git

$ git clone https://kibua20:1234@github.com/kibua20/PrivateTest.git 

   (ID: kibua20, Password:1234 Repository: PrivateTest)

 

ACCESS Token 받는 방법은Git Hub Manual 설명되어 있고, 요약하면 아래와 같습니다. 

1) 사용자 프로필 선택 후 2) 세팅 메뉴 선택

3) Developer Menu 선택 

4) Generate Access Token 선택

5) Token에 대한 권한 선택 - 필요 권한만 추가

Personal ACCESS TOKEN 생성
Personal ACCESS TOKEN 생성

 

3.2. git credential의  cache timeout 활용  (출처 , git ebook)

  git credential의 help를 설정하고 timeout 값을 아주 길게 잡아서 패스워드를 한 번만 입력할 수 있습니다.  일정 시간이 지나서 timout 되면 다시 ID와 패스워드를 입력해야 하는 불편함이 있지만 jekins 서버처럼 주기적으로 git command를 사용하는 경우 유효 시간이 갱신되기 때문에 사용 가능합니다 

 

$ git config credential.helper store
$ git config --global credential.helper 'cache --timeout 7200'

 

관련 글

[개발환경] - 우분투 작업 스케줄러 Crontab 사용법, 디버깅, 주의 사항

[모바일/Python] - Python: 폴더 백업 기능 구현 (7zip 압축, Sample code)

[개발환경] - Ubuntu 에서 SW 개발 Tool 설치

[개발환경] - git 사용하기 #1 (부제: GitHub)

[개발환경] - Git 사용하기#2 (bat, git-fuzzy, git-delta)

[모바일/Android] - repo 실행 시 DeprecationWarning: imp module 대처법

[모바일/Android] - Repo 에러: repo sync unable to read sha1 file of xxx, cannot initialize work tree

[모바일/Android] - [실패 사례] WSL(Windows Subsystem for Linux) 에서 Android 빌드하기

[개발환경] - 윈도우용 MobaXterm - SSH 및 X-Server 지원

[모바일/Android] - Android 10 (Q-OS) 소스 다운로드

그리드형



댓글8