{/* Trang này được tạo tự động từ SKILL.md của kỹ năng bởi website/scripts/generate-skill-docs.py. Chỉnh sửa nguồn SKILL.md, không phải trang này. */}
Xác thực GitHub
Thiết lập xác thực GitHub: Mã thông báo HTTPS, khóa SSH, đăng nhập gh CLI.
Siêu dữ liệu kỹ năng
| Nguồn | Đi kèm (được cài đặt theo mặc định) |
| Đường dẫn |
skills/GitHub/GitHub-auth ` | | Phiên bản |
1.1.0 ` | | Tác giả | Đại lý Hermes | | Giấy phép | MIT | | Nền tảng | Linux, macOS, Windows | | Thẻ |
GitHub
, `Authentication
, `Git
, `gh-CLI
, `SSH
,
Setup |
| Kỹ năng liên quan | XPROTECTX25XPROTECTX, XPROTECTX26XPROTECTX, XPROTECTX27XPROTECTX, XPROTECTX28XPROTECTX |
Tham khảo: đầy đủ SKILL.md
Sau đây là định nghĩa kỹ năng đầy đủ mà Hermes tải khi kỹ năng này được kích hoạt. Đây là những gì tác nhân coi là hướng dẫn khi kỹ năng được kích hoạt.
Thiết lập xác thực GitHub
Kỹ năng này thiết lập xác thực để tác nhân có thể làm việc với kho GitHub, PR, sự cố và CI. Nó bao gồm hai con đường:
- **
git(luôn có sẵn)** — sử dụng mã thông báo truy cập cá nhân HTTPS hoặc khóa SSH - **
ghCLI (nếu được cài đặt)** — quyền truy cập API GitHub phong phú hơn với quy trình xác thực đơn giản hơn
Luồng phát hiện
Khi người dùng yêu cầu bạn làm việc với GitHub, trước tiên hãy chạy kiểm tra này:
# Check what's available
git --version
gh --version 2>/dev/null || echo "gh not installed"
# Check if already authenticated
gh auth status 2>/dev/null || echo "gh not authenticated"
git config --global credential.helper 2>/dev/null || echo "no git credential helper"
`
``**Cây quyết định:**
1. Nếu
`gh auth status
` hiển thị đã được xác thực → bạn ổn, hãy sử dụng
`gh
` cho mọi thứ
2. Nếu
`gh
` được cài đặt nhưng chưa được xác thực → sử dụng phương thức "gh auth" bên dưới
3. Nếu
`gh
` chưa được cài đặt → sử dụng phương pháp "chỉ git" bên dưới (không cần sudo)
---
## Phương pháp 1: Xác thực chỉ dùng Git (Không gh, Không sudo)
Tính năng này hoạt động trên mọi máy có cài đặt
`git
. Không cần quyền truy cập root.
### Tùy chọn A: HTTPS với Mã thông báo truy cập cá nhân (Được khuyến nghị)
Đây là phương pháp di động nhất — hoạt động ở mọi nơi, không cần cấu hình SSH.
**Bước 1: Tạo mã thông báo truy cập cá nhân**
Yêu cầu người dùng truy cập: **https://GitHub.com/settings/tokens**
- Nhấp vào "Tạo mã thông báo mới (cổ điển)"
- Đặt tên như "Hermes-agent"
- Lựa chọn phạm vi:
-
`repo
` (truy cập kho lưu trữ đầy đủ - đọc, viết, đẩy, PR)
-
`workflow
` (kích hoạt và quản lý các hành động GitHub)
-
`read:org
` (nếu làm việc với kho tổ chức)
- Đặt hết hạn (90 ngày là mặc định tốt)
- Sao chép mã thông báo - nó sẽ không được hiển thị lại`**Bước 2: Định cấu hình git để lưu trữ mã thông báo**
``` bash
# Set up the credential helper to cache credentials
# "store" saves to ~/.git-credentials in plaintext (simple, persistent)
git config --global credential.helper store
# Now do a test operation that triggers auth — git will prompt for credentials
# Username: <their-GitHub-username>
# Password: <paste the personal access token, NOT their GitHub password>
git ls-remote https://GitHub.com/<their-username>/<any-repo>.git
`
``Sau khi nhập thông tin xác thực một lần, chúng sẽ được lưu và sử dụng lại cho tất cả các hoạt động trong tương lai.
**Thay thế: trình trợ giúp bộ đệm (thông tin xác thực hết hạn khỏi bộ nhớ)**
``` bash
# Cache in memory for 8 hours (28800 seconds) instead of saving to disk
git config --global credential.helper 'cache --timeout=28800'
`
``**Thay thế: đặt mã thông báo trực tiếp trong URL từ xa (mỗi repo)**
``` bash
# Embed token in the remote URL (avoids credential prompts entirely)
git remote set-url origin https://<username>:<token>@GitHub.com/<owner>/<repo>.git
`
``**Bước 3: Định cấu hình nhận dạng git**
``` bash
# Required for commits — set name and email
git config --global user.name "Their Name"
git config --global user.email "their-email@example.com"
`
``**Bước 4: Xác minh**
``` bash
# Test push access (this should work without any prompts now)
git ls-remote https://GitHub.com/<their-username>/<any-repo>.git
# Verify identity
git config --global user.name
git config --global user.email
`
### Tùy chọn B: Xác thực khóa SSH
Tốt cho người dùng thích SSH hoặc đã thiết lập khóa.
**Bước 1: Kiểm tra các khóa SSH hiện có**
``` bash
ls -la ~/.SSH/id_*.pub 2>/dev/null || echo "No SSH keys found"
`
``**Bước 2: Tạo khóa nếu cần**
`bash
# Generate an ed25519 key (modern, secure, fast)
SSH-keygen -t ed25519 -C "their-email@example.com" -f ~/.SSH/id_ed25519 -N ""
# Display the public key for them to add to GitHub
cat ~/.SSH/id_ed25519.pub
`
``Yêu cầu người dùng thêm khóa chung tại: **https://GitHub.com/settings/keys**
- Nhấp vào "Khóa SSH mới"
- Dán nội dung khóa công khai
- Đặt tiêu đề như "Hermes-agent-<machine-name>"`**Bước 3: Kiểm tra kết nối**
``` bash
SSH -T git@GitHub.com
# Expected: "Hi <username>! You've successfully authenticated..."
`
``**Bước 4: Định cấu hình git để sử dụng SSH cho GitHub**
``` bash
# Rewrite HTTPS GitHub URLs to SSH automatically
git config --global url."git@GitHub.com:".insteadOf "https://GitHub.com/"
`
``**Bước 5: Định cấu hình nhận dạng git**
``` bash
git config --global user.name "Their Name"
git config --global user.email "their-email@example.com"
`
---
## Cách 2: Xác thực gh CLI
Nếu
`gh
` được cài đặt, nó sẽ xử lý cả quyền truy cập API và thông tin xác thực git trong một bước.
### Đăng nhập trình duyệt tương tác (Máy tính để bàn)
`bash
gh auth login
# Select: GitHub.com
# Select: HTTPS
# Authenticate via browser
`
### Đăng nhập dựa trên mã thông báo (Máy chủ không đầu / SSH)
``` bash
echo "<THEIR_TOKEN>" | gh auth login --with-token
# Set up git credentials through gh
gh auth setup-git
`
### Xác minh
`bash
gh auth status
`
---
## Sử dụng API GitHub không có gh
Khi
`gh
` không khả dụng, bạn vẫn có thể truy cập API GitHub đầy đủ bằng
`curl
` bằng mã thông báo truy cập cá nhân. Đây là cách các kỹ năng GitHub khác triển khai các biện pháp dự phòng của chúng.
### Đặt mã thông báo cho lệnh gọi API
`bash
# Option 1: Export as env var (preferred — keeps it out of commands)
export GitHub_TOKEN="<token>"
# Then use in curl calls:
curl -s -H "Authorization: token $GitHub_TOKEN" \
https://API.GitHub.com/user
`
### Trích xuất mã thông báo từ thông tin xác thực Git
Nếu thông tin xác thực git đã được định cấu hình (thông qua cửa hàng credential.helper), mã thông báo có thể được trích xuất:
``` bash
# Read from git credential store
grep "GitHub.com" ~/.git-credentials 2>/dev/null | head -1 | sed 's|https://[^:]*:\([^@]*\)@.*|\1|'
`
### Helper: Phát hiện phương thức xác thực
Sử dụng mẫu này khi bắt đầu bất kỳ quy trình làm việc GitHub nào:
``` bash
# Try gh first, fall back to git + curl
if command -v gh &>/dev/null && gh auth status &>/dev/null; then
echo "AUTH_METHOD=gh"
elif [ -n "$GitHub_TOKEN" ]; then
echo "AUTH_METHOD=curl"
elif [ -f ~/.Hermes/.env ] && grep -q "^GitHub_TOKEN=" ~/.Hermes/.env; then
export GitHub_TOKEN=$(grep "^GitHub_TOKEN=" ~/.Hermes/.env | head -1 | cut -d= -f2 | tr -d '\n\r')
echo "AUTH_METHOD=curl"
elif grep -q "GitHub.com" ~/.git-credentials 2>/dev/null; then
export GitHub_TOKEN=$(grep "GitHub.com" ~/.git-credentials | head -1 | sed 's|https://[^:]*:\([^@]*\)@.*|\1|')
echo "AUTH_METHOD=curl"
else
echo "AUTH_METHOD=none"
echo "Need to set up authentication first"
fi
`
---
## Khắc phục sự cố| Vấn đề | Giải pháp |
|----------|----------|
|
`git push
` hỏi mật khẩu | GitHub đã vô hiệu hóa xác thực mật khẩu. Sử dụng mã thông báo truy cập cá nhân làm mật khẩu hoặc chuyển sang SSH |
|
`remote: Permission to X denied
` | Mã thông báo có thể thiếu phạm vi
`repo
- tạo lại với phạm vi chính xác |
|
`fatal: Authentication failed
` | Thông tin xác thực được lưu trong bộ nhớ đệm có thể đã cũ — chạy
`git credential reject
` sau đó xác thực lại |
|
`SSH: connect to host GitHub.com port 22: Connection refused
` | Thử SSH qua cổng HTTPS: thêm
`Host GitHub.com
` với
`Port 443
` và
`Hostname SSH.GitHub.com
` vào
~/.SSH/config
` |
| Thông tin xác thực không tồn tại | Kiểm tra
`git config --global credential.helper
- phải là
`store
` hoặc
`cache
` |
| Nhiều tài khoản GitHub | Sử dụng SSH với các khóa khác nhau cho mỗi bí danh máy chủ trong
~/.SSH/config
` hoặc URL thông tin xác thực trên mỗi repo |
|
`gh: command not found
+ không có sudo | Chỉ sử dụng Phương pháp 1 của git ở trên - không cần cài đặt |