푸시가 거부될 때 ① 비밀번호가 안 먹힙니다
Article
집에 택배를 시켜놓고 못 받은 날을 떠올려봅니다. 기사가 경비실 대신 무인 보관함에 넣어두고 문자를 보냅니다. 여섯 자리 임시 비밀번호가 적혀 있습니다. 그 번호로는 내 물건이 든 칸 하나만 열립니다. 며칠 지나면 못 씁니다. 남이 알게 되면 새로 받으면 그만입니다.
집 열쇠였다면 이야기가 다릅니다. 열쇠 하나로 현관 · 안방 · 서랍이 전부 열리고, 잃어버리면 자물쇠를 통째로 갈아야 합니다. 그래서 택배 받자고 집 열쇠를 맡기지는 않습니다.
깃허브가 몇 해 전에 정확히 이 생각을 했습니다. 오늘 다룰 게 그겁니다.
먼저 에러부터 봅니다
14강에서 git push 를 쳤을 때 아이디와 비밀번호를 넣었는데 이런 게 나온 사람이 있습니다.
- $ git push -u origin master
- Username for 'https://github.com': 내계정
- Password for 'https://내계정@github.com':
- remote: Support for password authentication was removed on August 13, 2021.
- remote: Please see https://docs.github.com/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on authenticating with GitHub.
- fatal: Authentication failed for 'https://github.com/내계정/my-first-repo.git/'
영어가 세 줄 나오면 대부분 여기서 창을 닫습니다. 그런데 첫 줄에 답이 다 있습니다. "비밀번호 인증 지원이 2021년 8월 13일에 없어졌다" 는 말입니다.
왜 막았을까요
계정 비밀번호
집 열쇠
- 새면 계정 전체가 넘어간다 — 저장소 · 설정 · 결제까지
- 기간이 없다. 바꾸기 전까지 영원히 유효하다
- 여러 컴퓨터에 저장해 두면 위험이 그만큼 늘어난다
- 새면 비밀번호를 갈아야 하고, 쓰던 데가 전부 끊긴다
토큰
택배 보관함 임시 비밀번호
- 허용한 범위 안에서만 통한다
- 기간을 정해서 만든다. 지나면 저절로 죽는다
- 컴퓨터마다 따로 만들어 쓸 수 있다
- 새면 그것 하나만 지우면 된다. 계정은 멀쩡하다
학원 컴퓨터를 쓴다고 생각하면 확 와닿습니다. 공용 컴퓨터에 계정 비밀번호를 저장해 두는 것과, 한 달짜리 임시 번호를 저장해 두는 것은 전혀 다른 이야기입니다.
토큰을 발급받습니다
깃허브 웹에서 합니다. 메뉴가 깊은 곳에 있어서 처음엔 잘 못 찾습니다.
- 01
깃허브 오른쪽 위 프로필 사진을 누르고
Settings로 들어갑니다저장소 설정이 아니라 계정 설정입니다. 헷갈리기 쉬운 자리입니다
- 02
왼쪽 메뉴를 맨 아래까지 내려
Developer settings를 누릅니다목록이 길어서 스크롤하지 않으면 안 보입니다. 못 찾는 사람 대부분이 여기서 멈춥니다
- 03
Personal access tokens를 펼치고Tokens (classic)을 고릅니다위에 다른 종류가 하나 더 있는데 오늘은 쓰지 않습니다
- 04
Generate new token→Generate new token (classic)을 누릅니다비밀번호를 한 번 더 물어볼 수 있습니다
- 05
세 칸을 채우고 맨 아래
Generate token을 누릅니다무엇을 채우는지는 바로 아래 표에 있습니다
| 칸 | 무엇을 넣나 | 왜 |
|---|---|---|
Note | 이 토큰을 어디에 쓸지 — 예: 학원 노트북 | 나중에 여러 개가 쌓였을 때 어느 게 어느 컴퓨터 건지 구분한다 |
Expiration | 유효 기간 — 30일이나 90일 | 기간을 정하는 게 토큰의 핵심이다. No expiration 은 고르지 않는다 |
Select scopes | `repo` 하나만 체크 | 저장소를 읽고 쓰는 권한이다. 이 편에서 하는 일은 여기 다 들어간다 |
토큰으로 push 합니다
터미널로 돌아와 14강에서 실패했던 명령을 다시 칩니다.
- 01
git push -u origin master를 다시 칩니다git push -u origin master - 02
Username에는 깃허브 아이디를 칩니다여기는 그대로입니다. 메일 주소가 아니라 아이디입니다
- 03
Password자리에 토큰을 붙여 넣습니다계정 비밀번호가 아닙니다. 방금 복사한
ghp_...를 넣습니다 - 04
창이 뜨는 경우에는 토큰을 넣는 칸을 찾습니다
윈도우에서는 터미널이 묻는 대신 로그인 창이 뜨기도 합니다. 그 창에도 토큰을 넣는 자리가 따로 있습니다
- 05
엔터를 치고 결과를 봅니다
14강에서 본 그 결과가 나오면 끝입니다
- $ git push -u origin master
- Enumerating objects: 21, done.
- Writing objects: 100% (21/21), 2.14 KiB | 1.07 MiB/s, done.
- To https://github.com/내계정/my-first-repo.git
- * [new branch] master -> master
- branch 'master' set up to track 'origin/master'.
다음부터는 안 물어봅니다
한 번 성공하면 그다음 git push 부터는 아무것도 안 묻습니다. 윈도우에 깔린 자격 증명 관리자가 방금 넣은 토큰을 저장해 뒀기 때문입니다. 2강에서 깃을 설치할 때 같이 깔린 물건입니다.
git push그냥 친다- 깃이 저장된 토큰을 꺼낸다물어보지 않는다
- 깃허브가 통과시킨다끝
편리하지만 여기에 함정이 하나 숨어 있습니다. 저장된 게 내 것이 아닐 때입니다. 학원이나 회사 공용 컴퓨터라면 앞사람 토큰이 남아 있을 수 있습니다. 그러면 아무것도 안 물어보고 조용히 앞사람 계정으로 시도하고, 조용히 거부당합니다. 16강이 통째로 그 이야기입니다.
기간이 지나면
30일짜리로 만들었다면 한 달 뒤에 다시 거부당합니다. 그때는 오늘 한 걸 그대로 반복합니다. 새로 발급받고, 저장된 옛 토큰을 지우고, 다시 넣습니다. 지우는 방법이 16강에 나옵니다.
| 묻는 것 | 넣을 것 |
|---|---|
| 깃허브 웹사이트 로그인 | 계정 비밀번호 (그대로다) |
터미널의 Username | 깃허브 아이디 |
터미널의 Password | 토큰 — 계정 비밀번호가 아니다 |
정리하면
- 비밀번호로
push하는 건 2021년 8월 13일에 막혔습니다. 잘못 친 게 아닙니다 - 웹사이트 로그인은 여전히 비밀번호입니다. 막힌 건 터미널에서 주고받을 때뿐입니다
- 대신 쓰는 게 토큰입니다. 계정 전체가 아니라 정해진 권한 · 정해진 기간만 떼어준 것입니다
- 발급 경로는
Settings→ 맨 아래Developer settings→Personal access tokens→Tokens (classic) - 정할 건 셋입니다. 이름 · 기간(30~90일) · 권한(
repo하나만) - 토큰은 딱 한 번만 보입니다. 그 화면에서 바로 복사합니다. 다시 볼 방법은 없습니다
- 터미널의
Password자리에 토큰을 붙여 넣습니다. 화면에 아무것도 안 보이는 게 정상입니다 - 한 번 성공하면 자격 증명 관리자가 저장해서 다음부터는 안 물어봅니다
- 토큰은 비밀번호입니다. 캡처 · 파일에 남기지 않습니다. 새면 지우고 새로 만들면 됩니다
다음 16강은 증상이 오늘과 똑같은데 원인이 다른 경우입니다. 토큰을 제대로 넣었는데도 거부당하거나, 아예 아무것도 안 묻고 실패합니다. PC방에 갔더니 앞사람 메신저가 로그인돼 있는 상황과 같습니다. 내 것이 아닌 자격 증명이 컴퓨터에 남아 있어서 그렇습니다. 학원 공용 컴퓨터에서는 이게 거의 항상 원인입니다. 그걸 찾아 지우는 법과, 영어 에러 메시지에서 어느 줄만 보면 되는지를 같이 다룹니다.