{/ Эта страница автоматически активируется из инструментов SKILL.md с помощью сайта/scripts/generate-skill-docs.py. Редактируйте исходный SKILL.md, а не эту страницу. /}

Авторизация на Гитхабе

Настройка аутентификации GitHub: токены HTTPS, ключи SSH, вход через gh CLI.

Метаданные навыки

Источник Встроенный (устанавливается по умолчанию)
Путь skills/github/github-auth
Версия 1.1.0
Автор Агент Гермес
Лицензия Массачусетский технологический институт
Платформы Linux, MacOS, Windows
Теги GitHub, Аутентификация, Git, gh-cli, SSH, Настройка
Связанные навыки github-pr-workflow, github-code-review, github-issues, github-repo-management

Справочник: полный SKILL.md:::информация

приведено полное определение навыков, которые Hermes загружает при активации этого навыка ниже. Это то, что агент видит в качестве инструкций, когда навыки активны.

Настройка аутентификации GitHub

Этот агент устанавливает аутентификацию, чтобы он мог работать с репозиториями GitHub, PR, Issues и CI. Он отвечает двумя способами:

Процесс обнаружения

Когда пользователь просит вас поработать с GitHub, сначала выполните следующую проверку:

# Проверить, что доступно
git --version
gh --version 2>/dev/null || echo "gh не установлен"

# Проверить, уже аутентифицирован ли
gh auth status 2>/dev/null || echo "gh не аутентифицирован"
git config --global credential.helper 2>/dev/null || echo "нет git credential helper"

Дерево решения: 1. Если gh auth status показывает аутентифицирован → всё хорошо, используйте gh для всего 2. Если gh установлен, но не аутентифицирован → используйте метод "gh auth" ниже. 3. Если gh не установлен → используйте метод «только git» ниже (sudo не нужен)


Метод 1: Аутентификация только через Git (без gh, без sudo)

Это работает на любой машине с установленным git. Не требуется root-доступ.

Вариант A: HTTPS с персональным токеном доступа (рекомендуется)

Это самый портативный метод — работает везде, не требует настройки SSH.

Шаг 1. Создание персонального токена доступа

Скажите пользователю перейти по адресу: https://github.com/settings/tokens

Шаг 2: Настройка git для хранения токенов

# Установите credential helper для кэширования учётных данных
# "store" сохраняет в ~/.git-credentials в открытом виде (просто, постоянно)
git config --global credential.helper store

# Теперь выполните тестовую операцию, которая запускает аутентификацию — git запросит учётные данные
# Username: <их-имя-пользователя-github>
# Password: <вставьте персональный токен доступа, НЕ пароль от GitHub>
git ls-remote https://github.com/<их-имя>/<любой-репозиторий>.git

После однократного ввода учётных данных они анализируются и повторно используются для всех операций.

Альтернатива: помощник кэширования (учётные данные удаляются из памяти)

# Кэшировать в памяти на 8 часов (28800 секунд) вместо сохранения на диск
git config --global credential.helper 'cache --timeout=28800'

Альтернативный вариант: установить токен непосредственно в URL-адрес удаленного репозитория (на репозитории)

# Встроить токен в URL удалённого репозитория (полностью избегает запросов учётных данных)
git remote set-url origin https://<username>:<token>@github.com/<owner>/<repo>.git

Шаг 3: Настройте идентификацию git

# Требуется для коммитов — установите имя и email
git config --global user.name "Их Имя"
git config --global user.email "their-email@example.com"

Шаг 4: проверьте

# Проверьте доступ на push (теперь должно работать без каких-либо запросов)
git ls-remote https://github.com/<их-имя>/<любой-репозиторий>.git

# Проверьте идентификацию
git config --global user.name
git config --global user.email

Вариант Б: Аутентификация по SSH-ключу

Адаптация для пользователей, которые предпочитают SSH или уже установили ключи.

Шаг 1: проверьте включение ключей SSH

ls -la ~/.ssh/id_*.pub 2>/dev/null || echo "SSH ключи не найдены"

Шаг 2: Сгенерируйте ключ, если нужно

# Сгенерируйте ключ ed25519 (современный, безопасный, быстрый)
ssh-keygen -t ed25519 -C "their-email@example.com" -f ~/.ssh/id_ed25519 -N ""

# Отобразите публичный ключ, чтобы пользователь добавил его в GitHub
cat ~/.ssh/id_ed25519.pub

Укажите пользователю добавить публичный ключ по адресу: https://github.com/settings/keys - Нажмите «Новый ключ SSH» - Вставьте критику публичного ключа. - Дайте ему название, например "гермес-агент-<имя-машины>"

Шаг 3: проверьте соединение

ssh -T git@github.com
# Ожидается: "Hi <username>! You've successfully authenticated..."

Шаг 4: Настройка git для использования SSH для GitHub

# Автоматически переписывать HTTPS URL GitHub на SSH
git config --global url."git@github.com:".insteadOf "https://github.com/"

Шаг 5: Настройте идентификацию git

git config --global user.name "Их Имя"
git config --global user.email "their-email@example.com"

Метод 2: Аутентификация через gh CLI

Если установлен gh, он обрабатывает и получает доступ к API и учётным данным git за один шаг.

Интерактивный вход через браузер (Десктоп)

gh auth login
# Выберите: GitHub.com
# Выберите: HTTPS
# Аутентифицируйтесь через браузер

Вход на основе токена (Headless/SSH серверы)

echo "<ИХ_ТОКЕН>" | gh auth login --with-token

# Настройте учётные данные git через gh
gh auth setup-git

Проверка

gh auth status

Использование GitHub API без gh

Когда gh недоступен, вы всё равно можете получить доступ к полному API GitHub с помощью curl и персонального токена доступа. Именно так другие навыки GitHub реализуют свои запасные варианты.

Установка токена для вызовов API

# Вариант 1: Экспортировать как переменную окружения (предпочтительно — держит токен вне команд)
export GITHUB_TOKEN="<token>"

# Затем используйте в вызовах curl:
curl -s -H "Authorization: token $GITHUB_TOKEN" \
  https://api.github.com/user

Извлечение токена из учётных данных git

Если учётные данные git уже настроены (через credential.helper store), токен можно потерять:

# Прочитать из хранилища учётных данных git
grep "github.com" ~/.git-credentials 2>/dev/null | head -1 | sed 's|https://[^:]*:\([^@]*\)@.*|\1|'

Помощник: Определение методов аутентификации

Используйте этот шаблон в любом начале рабочего процесса GitHub:

# Сначала попробовать gh, затем 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 "Необходимо сначала настроить аутентификацию"
fi

Устранение неполадок

Проблема Решение
git push запрашивает пароль GitHub отключил аутентификацию по паролю. Используйте персональный токен доступа в качестве пароля или переключитесь на SSH
удаленный: определение X отклонений Токену можно не захватывать области repo — перегенерируйте с запросами по областям
фатально: аутентификация не удалась Кэшированные учётные данные можно удалить — калибруйте git credential ignore, а затем повторно аутентифицируйте
ssh: подключиться к хосту github.com, порт 22: отклонение соединения формат SSH через порт HTTPS: страницы Host github.com с Port 443 и Hostname ssh.github.com в ~/.ssh/config
Учётные данные не удалось Проверьте git config --global credential.helper — должно быть store или cache
Несколько учётных записей GitHub Используйте SSH с другими ключами для каждого псевдонима хоста в ~/.ssh/config или URL-адреса учётных данных для каждого репозитория
gh: команда не найдена + нет sudo Используйте только метод git (Метод 1 выше) — установка не требуется