Github Auth
Настройка аутентификации GitHub: HTTPS-токены, SSH-ключи, вход через gh CLI.
Метаданные навыка
| Источник | Встроенный (установлен по умолчанию) |
| Путь | skills/github/github-auth |
| Версия | 1.1.0 |
| Автор | Hermes Agent |
| Лицензия | MIT |
| Платформы | linux, macos, windows |
| Теги | GitHub, Authentication, Git, gh-cli, SSH, Setup |
| Связанные навыки | github-pr-workflow, github-code-review, github-issues, github-repo-management |
Справочник: полный SKILL.md
Ниже приведено полное определение навыка, которое Hermes загружает при его активации. Именно этот текст агент получает в качестве инструкций, когда навык задействован.
GitHub Authentication Setup
Навык настраивает аутентификацию, чтобы агент мог работать с репозиториями, PR, задачами и CI на GitHub. Поддерживаются два пути:
git(всегда доступен) — HTTPS personal access tokens или SSH-ключиghCLI (если установлен) — расширенный доступ к GitHub API с более простым процессом авторизации
Detection Flow
Когда пользователь просит поработать с GitHub, сначала выполни проверку:
# 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"
Дерево решений:
- Если
gh auth statusпоказывает аутентификацию — всё готово, используйghдля всего - Если
ghустановлен, но не авторизован → применяй метод “gh auth” ниже - Если
ghне установлен → применяй метод “git-only” ниже (без sudo)
Метод 1: аутентификация только через Git (без gh, без sudo)
Работает на любой машине с установленным git. Root-доступ не нужен.
Вариант A: HTTPS с personal access token (рекомендуется)
Самый переносимый способ — работает везде, SSH-конфигурация не нужна.
Шаг 1: создай personal access token
Направь пользователя по адресу: https://github.com/settings/tokens
- Нажми “Generate new token (classic)”
- Дай имя, например “hermes-agent”
- Выбери области доступа:
repo(полный доступ к репозиторию — чтение, запись, push, PR)workflow(запуск и управление GitHub Actions)read:org(если работаешь с репозиториями организации)
- Укажи срок действия (90 дней — хороший вариант по умолчанию)
- Скопируй токен — он больше не отобразится
Шаг 2: настрой git для хранения токена
# 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
После однократного ввода учётных данных они сохраняются и используются для всех последующих операций.
Альтернатива: cache helper (учётные данные хранятся в памяти временно, потом истекают)
# Cache in memory for 8 hours (28800 seconds) instead of saving to disk
git config --global credential.helper 'cache --timeout=28800'
Альтернатива: вставить токен прямо в URL репозитория (для отдельного репо)
# Embed token in the remote URL (avoids credential prompts entirely)
git remote set-url origin https://<username>:<token>@github.com/<owner>/<repo>.git
Шаг 3: настрой идентификацию в git
# Required for commits — set name and email
git config --global user.name "Their Name"
git config --global user.email "their-email@example.com"
Шаг 4: проверка
# 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
Вариант B: аутентификация по SSH-ключу
Подходит тем, кто предпочитает SSH или уже настроил ключи.
Шаг 1: проверь наличие существующих SSH-ключей
ls -la ~/.ssh/id_*.pub 2>/dev/null || echo "No SSH keys found"
Шаг 2: сгенерируй ключ, если нужно
# 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
Направь пользователя добавить публичный ключ по адресу: https://github.com/settings/keys
- Нажми “New SSH key”
- Вставь содержимое публичного ключа
- Дай заголовок, например “hermes-agent-<machine-name>”
Шаг 3: проверь соединение
ssh -T git@github.com
# Expected: "Hi <username>! You've successfully authenticated..."
Шаг 4: настрой git на использование SSH для GitHub
# Rewrite HTTPS GitHub URLs to SSH automatically
git config --global url."git@github.com:".insteadOf "https://github.com/"
Шаг 5: настрой идентификацию в git
git config --global user.name "Their Name"
git config --global user.email "their-email@example.com"
Метод 2: аутентификация через gh CLI
Если gh установлен, он берёт на себя и API-доступ, и учётные данные git за один шаг.
Интерактивный вход через браузер (десктоп)
gh auth login
# Select: GitHub.com
# Select: HTTPS
# Authenticate via browser
Вход по токену (headless / SSH-серверы)
echo "<THEIR_TOKEN>" | gh auth login --with-token
# Set up git credentials through gh
gh auth setup-git
Проверка
gh auth status
Работа с GitHub API без gh
Когда gh недоступен, к полному GitHub API можно обращаться через curl с personal access token. Именно так устроены запасные методы в других навыках GitHub.
Установка токена для API-запросов
# 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
Извлечение токена из учётных данных git
Если git credentials уже настроены (через credential.helper store), токен можно извлечь:
# Read from git credential store
grep "github.com" ~/.git-credentials 2>/dev/null | head -1 | sed 's|https://[^:]*:\([^@]*\)@.*|\1|'
Вспомогательный шаблон: определение метода аутентификации
Используй этот шаблон в начале любого GitHub-workflow:
# 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
Устранение неполадок
| Проблема | Решение |
|---|---|
git push запрашивает пароль | GitHub отключил парольную авторизацию. Используй personal access token вместо пароля или переключись на SSH |
remote: Permission to X denied | Токен может не иметь scope repo — перегенерируй с нужными областями доступа |
fatal: Authentication failed | Кэшированные учётные данные устарели — выполни git credential reject, затем авторизуйся снова |
ssh: connect to host github.com port 22: Connection refused | Попробуй SSH через HTTPS-порт: добавь в ~/.ssh/config блок Host github.com с Port 443 и Hostname ssh.github.com |
| Учётные данные не сохраняются | Проверь git config --global credential.helper — значение должно быть store или cache |
| Несколько аккаунтов GitHub | Используй SSH с разными ключами и псевдонимами хостов в ~/.ssh/config, либо задавай учётные данные через URL для каждого репо |
gh: command not found + нет sudo | Используй Метод 1 (git-only) — установка ничего не требует |