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-ключи
  • gh CLI (если установлен) — расширенный доступ к 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"

Дерево решений:

  1. Если gh auth status показывает аутентификацию — всё готово, используй gh для всего
  2. Если gh установлен, но не авторизован → применяй метод “gh auth” ниже
  3. Если 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) — установка ничего не требует
ESC