학습 자료

푸시가 거부될 때 ① 비밀번호가 안 먹힙니다


Article

집에 택배를 시켜놓고 못 받은 날을 떠올려봅니다. 기사가 경비실 대신 무인 보관함에 넣어두고 문자를 보냅니다. 여섯 자리 임시 비밀번호가 적혀 있습니다. 그 번호로는 내 물건이 든 칸 하나만 열립니다. 며칠 지나면 못 씁니다. 남이 알게 되면 새로 받으면 그만입니다.

집 열쇠였다면 이야기가 다릅니다. 열쇠 하나로 현관 · 안방 · 서랍이 전부 열리고, 잃어버리면 자물쇠를 통째로 갈아야 합니다. 그래서 택배 받자고 집 열쇠를 맡기지는 않습니다.

깃허브가 몇 해 전에 정확히 이 생각을 했습니다. 오늘 다룰 게 그겁니다.

먼저 에러부터 봅니다

14강에서 git push 를 쳤을 때 아이디와 비밀번호를 넣었는데 이런 게 나온 사람이 있습니다.

Git Bash
  • $ 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일에 없어졌다" 는 말입니다.

왜 막았을까요

계정 비밀번호와 토큰

계정 비밀번호

집 열쇠

  • 새면 계정 전체가 넘어간다 — 저장소 · 설정 · 결제까지
  • 기간이 없다. 바꾸기 전까지 영원히 유효하다
  • 여러 컴퓨터에 저장해 두면 위험이 그만큼 늘어난다
  • 새면 비밀번호를 갈아야 하고, 쓰던 데가 전부 끊긴다

토큰

택배 보관함 임시 비밀번호

  • 허용한 범위 안에서만 통한다
  • 기간을 정해서 만든다. 지나면 저절로 죽는다
  • 컴퓨터마다 따로 만들어 쓸 수 있다
  • 새면 그것 하나만 지우면 된다. 계정은 멀쩡하다
토큰은 계정에서 일부만 떼어낸 임시 권한이다. 정식 이름은 Personal Access Token, 줄여서 PAT

학원 컴퓨터를 쓴다고 생각하면 확 와닿습니다. 공용 컴퓨터에 계정 비밀번호를 저장해 두는 것과, 한 달짜리 임시 번호를 저장해 두는 것은 전혀 다른 이야기입니다.

토큰을 발급받습니다

깃허브 웹에서 합니다. 메뉴가 깊은 곳에 있어서 처음엔 잘 못 찾습니다.

토큰 발급 경로
  1. 01

    깃허브 오른쪽 위 프로필 사진을 누르고 Settings 로 들어갑니다

    저장소 설정이 아니라 계정 설정입니다. 헷갈리기 쉬운 자리입니다

  2. 02

    왼쪽 메뉴를 맨 아래까지 내려 Developer settings 를 누릅니다

    목록이 길어서 스크롤하지 않으면 안 보입니다. 못 찾는 사람 대부분이 여기서 멈춥니다

  3. 03

    Personal access tokens 를 펼치고 Tokens (classic) 을 고릅니다

    위에 다른 종류가 하나 더 있는데 오늘은 쓰지 않습니다

  4. 04

    Generate new tokenGenerate new token (classic) 을 누릅니다

    비밀번호를 한 번 더 물어볼 수 있습니다

  5. 05

    세 칸을 채우고 맨 아래 Generate token 을 누릅니다

    무엇을 채우는지는 바로 아래 표에 있습니다

종류가 두 가지 있지만 이 편은 classic 한 갈래로만 간다. 갈래를 늘리면 헷갈리기만 한다
발급 화면에서 정할 세 가지
무엇을 넣나
Note이 토큰을 어디에 쓸지 — 예: 학원 노트북나중에 여러 개가 쌓였을 때 어느 게 어느 컴퓨터 건지 구분한다
Expiration유효 기간 — 30일이나 90일기간을 정하는 게 토큰의 핵심이다. No expiration 은 고르지 않는다
Select scopes`repo` 하나만 체크저장소를 읽고 쓰는 권한이다. 이 편에서 하는 일은 여기 다 들어간다
권한은 필요한 만큼만 준다. 전부 체크하면 집 열쇠를 다시 만드는 셈이다

토큰으로 push 합니다

터미널로 돌아와 14강에서 실패했던 명령을 다시 칩니다.

토큰 넣는 자리
  1. 01

    git push -u origin master 를 다시 칩니다

    git push -u origin master
  2. 02

    Username 에는 깃허브 아이디를 칩니다

    여기는 그대로입니다. 메일 주소가 아니라 아이디입니다

  3. 03

    Password 자리에 토큰을 붙여 넣습니다

    계정 비밀번호가 아닙니다. 방금 복사한 ghp_... 를 넣습니다

  4. 04

    창이 뜨는 경우에는 토큰을 넣는 칸을 찾습니다

    윈도우에서는 터미널이 묻는 대신 로그인 창이 뜨기도 합니다. 그 창에도 토큰을 넣는 자리가 따로 있습니다

  5. 05

    엔터를 치고 결과를 봅니다

    14강에서 본 그 결과가 나오면 끝입니다

Git Bash
  • $ 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강에서 깃을 설치할 때 같이 깔린 물건입니다.

두 번째 push 부터
  1. git push그냥 친다
  2. 깃이 저장된 토큰을 꺼낸다물어보지 않는다
  3. 깃허브가 통과시킨다
편해진 대신, 저장된 게 남의 것이면 그것도 조용히 쓰인다. 16강이 그 이야기다

편리하지만 여기에 함정이 하나 숨어 있습니다. 저장된 게 내 것이 아닐 때입니다. 학원이나 회사 공용 컴퓨터라면 앞사람 토큰이 남아 있을 수 있습니다. 그러면 아무것도 안 물어보고 조용히 앞사람 계정으로 시도하고, 조용히 거부당합니다. 16강이 통째로 그 이야기입니다.

기간이 지나면

30일짜리로 만들었다면 한 달 뒤에 다시 거부당합니다. 그때는 오늘 한 걸 그대로 반복합니다. 새로 발급받고, 저장된 옛 토큰을 지우고, 다시 넣습니다. 지우는 방법이 16강에 나옵니다.

여기까지 정리
묻는 것넣을 것
깃허브 웹사이트 로그인계정 비밀번호 (그대로다)
터미널의 Username깃허브 아이디
터미널의 Password토큰 — 계정 비밀번호가 아니다
세 줄이 전부다. 셋째 줄 하나 때문에 이 강의가 있다

정리하면

  • 비밀번호로 push 하는 건 2021년 8월 13일에 막혔습니다. 잘못 친 게 아닙니다
  • 웹사이트 로그인은 여전히 비밀번호입니다. 막힌 건 터미널에서 주고받을 때뿐입니다
  • 대신 쓰는 게 토큰입니다. 계정 전체가 아니라 정해진 권한 · 정해진 기간만 떼어준 것입니다
  • 발급 경로는 Settings맨 아래 Developer settingsPersonal access tokensTokens (classic)
  • 정할 건 셋입니다. 이름 · 기간(30~90일) · 권한(repo 하나만)
  • 토큰은 딱 한 번만 보입니다. 그 화면에서 바로 복사합니다. 다시 볼 방법은 없습니다
  • 터미널의 Password 자리에 토큰을 붙여 넣습니다. 화면에 아무것도 안 보이는 게 정상입니다
  • 한 번 성공하면 자격 증명 관리자가 저장해서 다음부터는 안 물어봅니다
  • 토큰은 비밀번호입니다. 캡처 · 파일에 남기지 않습니다. 새면 지우고 새로 만들면 됩니다

다음 16강은 증상이 오늘과 똑같은데 원인이 다른 경우입니다. 토큰을 제대로 넣었는데도 거부당하거나, 아예 아무것도 안 묻고 실패합니다. PC방에 갔더니 앞사람 메신저가 로그인돼 있는 상황과 같습니다. 내 것이 아닌 자격 증명이 컴퓨터에 남아 있어서 그렇습니다. 학원 공용 컴퓨터에서는 이게 거의 항상 원인입니다. 그걸 찾아 지우는 법과, 영어 에러 메시지에서 어느 줄만 보면 되는지를 같이 다룹니다.

푸시가 거부될 때 ① 비밀번호가 안 먹힙니다 — 디코드랩(DCODELAB)