github password, username 입력 자동화하기

Chullin
7 min readJul 3, 2018

--

.

안녕하세요. 개발자 chullin입니다.

.

github으로 푸시할 때마다 username, password 치는 법을 자동화하는 방법에 대해 간단히 기억을 기록으로 남겨두고자 합니다. 김대현님의 미디엄 글이 큰 도움이 되었습니다.

.

.

TL;DR

  • 문제 1은 한 컴퓨터 내 하나의 깃헙계정에 대해 패스워드 입력을 자동화하는 것입니다.
  • 문제 1의 해결방안은 osxkeychain을 활용하는 것입니다.
  • 문제 2는 한 컴퓨터 내 여러개 깃헙계정에 대해 패스워드 입력을 자동화하는 것입니다.
  • 문제 2의 해결방안은 osxkeychain을 활용함과 동시에 url을 구체화하는 것입니다.

.

.

문제상황#1 계정 하나 패스워드 입력 자동화

.

github으로 푸시할 때, 다음과 같이 username, password를 쳐야 합니다.

Username for 'https://github.com': 제 깃헙 유저이름
Password for 'https://chullino@github.com': 제 깃헙 비밀번호

반복되니 자동화의 필요성을 느끼게 되었습니다.

.

해결방안#1

.

OSX의 키체인을 활용해서 유저명, 비밀번호 입력 과정을 자동화할 수 있습니다.

(1) 먼저, credential-osxkeychain이 존재하는지 확인합니다.

git credential-osxkeychain

있으면 아래와 같은 결과가 뜹니다.

git credential-osxkeychain
Usage: git credential-osxkeychain <get|store|erase>

없으면 아래와 같은 결과가 뜹니다.

git credential-osxkeychain
xcode-select: note: no developer tools were found at '/Applications/Xcode.app',
requesting install. Choose an option in the dialog to download the command line developer tools.

없으니 아래의 코드를 통해 설치하면 됩니다.

brew install git

(2) keychain을 설정할 것을 예약해 둡니다.

git config --global credential.helper osxkeychain

(3) 그리고는 새롭게 인증이 필요한 상황을 만들어서 인증을 합니다. 그래야만, 키체인이 실제로 생성되게 됩니다.

저같은 경우는 레포에서 임의로 브랜치를 하나 따서, 해당 브랜치를 push하는 식으로 인증이 필요한 상황을 만들었습니다. 즉, 다음의 순서를 따르게 된 것입니다.

git checkout -b "newBranch"
touch newFile
git add .
git commit
git push origin newBranch

왜 새로운 브랜치를 만들었는지 궁금하신 분들이 있으실 법 한데요. 저같은 경우는 새로운 브랜치를 만들 때, 새로이 인증을 해야하는 조건이 충족되었기 때문입니다. 새로 브랜치를 만들고, 푸시를 하고 나니, 키체인이 실제로 생성될 수 있었습니다.

제가 잘 몰라서 그런 듯 싶어요. 다른 방안으로 인증할 상황을 만들 수 있을 것 같아요. 또한, 아직 제가 깃헙에서 ‘새로운 인증이 필요한 상황’이 떠오르지 않아서 이런 미봉책을 사용하는 듯 싶습니다.

(4) finder로 keychain access를 찾아보면, 다음과 같은 정보를 찾아볼 수 있습니다.

제 깃헙 유저명 chullino 로 키값이 저장되었다는 것을 확인할 수 있습니다.

이제 앞으로 git push 할 때에는 패스워드를 칠 필요 없이 push가 됩니다.

이렇게 문제 1은 해결되었습니다.

.

.

문제상황#2 계정 여러개 각각에 대해 패스워드 입력 자동화

.

저는 깃헙 계정이 두 개 있습니다. 각각을 chullino_1, chullino_2라고 해볼게요. 저는 두 계정을 번갈아 가면서 사용하며, 깃헙의 두 계정 각 레포에 하나씩 푸시합니다.

chullino_1 계정의 repo_1에 푸시하고, chullino_2 계정의 repo_2에 푸시하고, chullino_1 계정의 repo_1에 푸시하고, … 이런 식인 것입니다.

두 계정 모두에 대해서, 유저이름과 비밀번호 입력 과정을 키체인을 통해 자동화하고자 했습니다.

그래서 두 계정 각각에 대한 키체인을 만들었지요. chullino_1 계정을 쓰는 레포에서도 해결방안 1을 통해 키체인을 만들었습니다. 또한 chullino_2 계정을 쓰는 레포에서도 해결방안 1을 통해 키체인을 만들었습니다. 해결이 될 줄 알았는데 다음의 문제가 발생했습니다.

remote: Permission to chullino_1/nomadcoin.git denied to chullino_2

저는 chullino_1 키체인을 만든 후에 chullino_2 키체인을 만들었는데요. chullino_2을 키체인으로 박아두고 git push를 하면 chilling_1계정을 쓰는 레포에 git push할 때 위 에러가 나타나게 되었습니다.

반대로, chilling_2 키체인을 만든 후에 chullino_1키체인을 만들게 되면, chullino_2계정을 쓰는 레포에 git push를 할 때 위 에러가 나타나게 되었습니다. 좀 더 정확히 말씀드리면 아래와 같은 에러였습니다.

remote: Permission to chullino_2/nomadcoin.git denied to chullino_1

.

해결방안#2

.

이런 상황에서는 리모트 저장소 URL에 계정 정보를 포함시키면 됩니다. 이 해결책은 김대현님으로부터 큰 도움을 많이 받았습니다.

.

(1) 해결방안#1대로 chullino_1, chullino_2에 대해 각각의 키체인을 만듭니다. 각각의 로컬 레포로 들어가서 해결방안#1 대로 진행하면 됩니다. 그러면, 제가 위에 올린 사진처럼, 깃헙 키체인이 2개 이상 생성될 수 있습니다.

(2) 각각의 로컬 레포의 리모트 저장소 URL을 확인합니다.

git remote -v

그러면, 다음과 같은 값을 확인할 수 있습니다. 아래는 chullino_1의 계정을 쓰는 레포에 저장된 리모트 저장소 URL입니다.

origin https://github.com/chullino_1/project.git (fetch)
origin
https://github.com/chullino_1/project.git (push)

(3) 각각의 로컬 레포의 리모트 저장소 URL을 아래처럼 변경합니다. 계정 정보를 포함시키는 방식입니다. 예를 들어, chullino_1계정을 쓰는 로컬 레포에서는 아래 명령어를 입력합니다.

git remote set-url origin https://chullino_1@github.com/chullino_1/project.git

예를 들어, chullino_2 계정을 쓰는 로컬 레포에서는 아래 명령어를 입력하면 될 것입니다.

git remote set-url origin https://chullino_2@github.com/chullino_2/project.git

이렇게 하고 나니, 두 개 이상의 계정에 대해서도 패스워드 입력 과정을 자동화할 수 있게 되었습니다.

두 번째 문제도 해결되었습니다.

.

.

정리를 마무리하며

.

.

한 개의 계정에 대해 username, password입력을 자동화하는 방법을 정리해보았습니다. 또한, 여러 계정에 대해 username, password 입력을 자동화하는 법을 정리해보았습니다.

TL;DR

  • 문제 1은 한 컴퓨터 내 하나의 깃헙계정에 대해 패스워드 입력을 자동화하는 것입니다.
  • 문제 1의 해결방안은 osxkeychain을 활용하는 것입니다.
  • 문제 2는 한 컴퓨터 내 여러개 깃헙계정에 대해 패스워드 입력을 자동화하는 것입니다.
  • 문제 2의 해결방안은 osxkeychain을 활용함과 동시에 url을 구체화하는 것입니다.

.

그럼 이만 안녕히 계세요. 개발자 chullin이었습니다. 오늘도 문제를 발견하고, 문제의 원인을 찾고, 문제의 해결책을 찾은 날이었습니다.

오늘은 근본적인 해결책을 찾지는 못하고, 미봉책을 제시한 듯 싶네요.

궁금하신 점과 어려운 내용은 댓글로 답장 드리겠습니다. 도움이 되신 분들로부터의 Clap은 큰 힘이 됩니다!

--

--