Fix lỗi Git Authentication Failed cho GitHub: 'Support for password authentication was removed'

beginner📦 Git2026-03-18| Git 2.x trên Windows / macOS / Linux, kết nối GitHub qua HTTPS

Error Message

remote: Support for password authentication was removed on August 13, 2021. fatal: Authentication failed for 'https://github.com/user/repo.git/'
#git#github#authentication#token#credential#https

Chuyện gì vừa xảy ra?

Bạn chạy git push, nhập mật khẩu GitHub, rồi nhận được thông báo này:

remote: Support for password authentication was removed on August 13, 2021.
fatal: Authentication failed for 'https://github.com/user/repo.git/'

GitHub đã khai tử xác thực bằng mật khẩu thông thường cho các thao tác Git từ tháng 8 năm 2021 — đây là quyết định bảo mật nhằm chống lại các cuộc tấn công credential stuffing. Credential cache của bạn vẫn đang lưu mật khẩu cũ. Mọi lệnh push và pull đều thất bại cho đến khi bạn thay thế bằng Personal Access Token (PAT) hoặc chuyển sang SSH.

Tại sao lỗi này xảy ra

Trước tháng 8 năm 2021, bạn có thể push lên GitHub qua HTTPS bằng mật khẩu tài khoản. GitHub đã tắt tính năng này để giảm thiểu nguy cơ tài khoản bị chiếm đoạt từ các mật khẩu bị rò rỉ. PAT có phạm vi giới hạn và có thể thu hồi — nếu một token bị lộ, bạn chỉ cần thu hồi đúng token đó mà không cần thay đổi mật khẩu tài khoản.

Vấn đề hiện tại: trình quản lý credential trên hệ điều hành của bạn đang cache mật khẩu cũ. Git liên tục gửi lại mật khẩu đó. GitHub liên tục từ chối. Đó là vòng lặp bạn đang mắc kẹt.

Cách khắc phục nhanh: tạo Personal Access Token

Hai bước — tạo token trên GitHub, sau đó dùng nó như mật khẩu.

Bước 1 — Tạo PAT trên GitHub

  • Vào GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic).
  • Nhấp Generate new token (classic).
  • Đặt tên dễ nhận biết (ví dụ: work-laptop-2025) và đặt ngày hết hạn — 90 ngày là mặc định hợp lý.
  • Trong phần Scopes, tích chọn repo (toàn quyền kiểm soát repository riêng tư). Đó là tất cả những gì bạn cần để push và pull.
  • Nhấp Generate tokensao chép ngay lập tức. GitHub chỉ hiển thị token một lần duy nhất.

Token của bạn sẽ bắt đầu bằng ghp_ và dài khoảng 40 ký tự. Đó là mật khẩu mới của bạn.

Bước 2 — Dùng token làm mật khẩu

Chạy lại lệnh push. Khi Git yêu cầu thông tin đăng nhập, nhập:

  • Username: tên người dùng GitHub của bạn
  • Password: dán token vào (không phải mật khẩu tài khoản)
git push origin main
Username for 'https://github.com': your-username
Password for 'https://your-username@github.com': ghp_xxxxxxxxxxxxxxxxxxxx

Nếu push thành công, cách khắc phục tức thời đã hoạt động. Tuy nhiên Git sẽ hỏi lại ở lần push tiếp theo — đọc tiếp để lưu token vĩnh viễn.

Khắc phục vĩnh viễn: lưu token vào credential store

Tùy chọn A — Git Credential Manager (khuyên dùng)

Git Credential Manager (GCM) lưu trữ token của bạn an toàn trong keychain của hệ điều hành và tự động xử lý xác thực lại. Nó đi kèm với Git for Windows và dễ dàng cài đặt trên macOS và Linux.

Windows — GCM đã được tích hợp sẵn với Git for Windows. Push một lần, cửa sổ trình duyệt mở ra để xác thực, và Git nhớ token của bạn cho đến khi hết hạn.

macOS:

brew install --cask git-credential-manager
git-credential-manager configure

Linux (Debian/Ubuntu) — tải file .deb mới nhất từ trang releases của GCM, sau đó:

sudo dpkg -i gcm-linux_amd64.X.X.X.deb
git-credential-manager configure

Sau khi cài đặt GCM, xóa mật khẩu cache cũ để GCM có thể lưu token mới:

git credential reject
protocol=https
host=github.com

(Chạy lệnh, nhấn Enter, nhập từng dòng, sau đó nhấn Enter ở dòng trống để kết thúc.)

Push lại. GCM hỏi một lần, lưu token, và bạn sẽ không bị hỏi lại trong suốt thời gian token còn hiệu lực.

Tùy chọn B — Nhúng token vào URL remote

Không có credential manager? Đưa token trực tiếp vào URL remote:

git remote set-url origin https://YOUR_TOKEN@github.com/user/repo.git

Git đọc tự động trong mỗi lần push và pull. Không cần nhập thủ công, không cần cài đặt thêm.

Lưu ý: token nằm dưới dạng văn bản thuần túy bên trong .git/config. Bất kỳ ai đọc được file đó đều có thể dùng token của bạn. Tránh dùng cách này trên máy dùng chung hoặc máy công cộng.

Tùy chọn C — Chuyển sang SSH

SSH key không hết hạn và không cần nhập gì sau khi đã cấu hình. Nếu bạn push lên GitHub mỗi ngày, công sức thiết lập một lần sẽ hoàn toàn xứng đáng.

# Tạo key (bỏ qua nếu ~/.ssh/id_ed25519 đã tồn tại)
ssh-keygen -t ed25519 -C "you@example.com"

# In public key ra màn hình
cat ~/.ssh/id_ed25519.pub

Sao chép kết quả đó và dán vào GitHub → Settings → SSH and GPG keys → New SSH key. Sau đó trỏ remote của bạn sang SSH:

git remote set-url origin git@github.com:user/repo.git

Kiểm tra kết nối trước khi push lần tiếp theo:

ssh -T git@github.com
# Hi your-username! You've successfully authenticated...

Xóa mật khẩu cache bị lỗi

Vẫn thấy Authentication failed sau khi đã tạo token? Hệ điều hành đang gửi lại mật khẩu cache cũ trước khi Git kịp hỏi. Xóa cache theo từng nền tảng:

Windows (Credential Manager):

git credential-manager erase
protocol=https
host=github.com

Hoặc: mở Control Panel → Credential Manager → Windows Credentials và xóa bất kỳ mục nào liên quan đến github.com.

macOS (Keychain):

git credential-osxkeychain erase
protocol=https
host=github.com

Hoặc mở Keychain Access, tìm kiếm github.com, và xóa mục đó thủ công.

Linux (store helper):

git config --global credential.helper store

Sau đó mở ~/.git-credentials bằng trình soạn thảo văn bản và xóa dòng chứa github.com.

Kiểm tra kết quả

Push thứ gì đó nhỏ để xác nhận mọi thứ hoạt động:

git push origin main

Kết quả thành công trông như sau:

Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
To https://github.com/user/repo.git
   a1b2c3d..e4f5g6h  main -> main

Không còn Authentication failed. Xong.

Để kiểm tra credential helper nào Git đang dùng hiện tại:

git config --global credential.helper

Mẹo bảo mật token

  • Đặt ngày hết hạn. 90 ngày là mặc định hợp lý. GitHub gửi email cho bạn một tuần trước khi hết hạn, nên bạn sẽ không bị bất ngờ giữa chừng công việc.
  • Dùng phạm vi tối thiểu. Với hầu hết repository cá nhân, repo là tất cả những gì bạn cần. Đừng cấp quyền nhiều hơn mức cần thiết.
  • Không bao giờ commit token. Nếu một token lọt vào commit, hãy thu hồi ngay trên GitHub và tạo token mới. Token bị lộ vô hiệu hóa ngay khi bạn thu hồi nó.
  • Cần chuỗi ngẫu nhiên mạnh cho các công cụ hoặc cấu hình khác? ToolCraft's Password Generator chạy hoàn toàn trên trình duyệt — không có dữ liệu nào được gửi ra ngoài.

Related Error Notes