Перейти к основному содержимому

Github Auth

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

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

ИсточникВстроенный (устанавливается по умолчанию)
Путьskills/github/github-auth
Версия1.1.0
АвторVibeOS
ЛицензияMIT
Платформыlinux, macos, windows
ТегиGitHub, Authentication, Git, gh-cli, SSH, Setup
Связанные навыкиgithub-pr-workflow, github-code-review, github-issues, github-repo-management

Справочник: полный SKILL.md​

к сведению

Ниже приведено полное описание навыка, которое VibeOS загружает при его активации. Агент видит эти инструкции, когда навык активен.

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

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

  • git (всегда доступен) — использует HTTPS-токены или SSH-ключи
  • gh CLI (если установлен) — более широкий доступ к API GitHub с упрощённым процессом аутентификации

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

Когда пользователь просит вас работать с 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

  • Нажмите «Generate new token (classic)»
  • Дайте ему имя, например «vibeos-agent»
  • Выберите области:
    • repo (полный доступ к репозиторию — чтение, запись, push, PR)
    • workflow (запуск и управление GitHub Actions)
    • read:org (если работаете с репозиториями организации)
  • Установите срок действия (90 дней — хороший вариант по умолчанию)
  • Скопируйте токен — он больше не будет показан

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

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

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

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

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

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

Альтернатива: установите токен напрямую в URL удалённого репозитория (для каждого репозитория)

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

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

# Требуется для коммитов — укажите имя и email
git config --global user.name "Имя Пользователя"
git config --global user.email "email-пользователя@example.com"

Шаг 4: Проверка

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

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

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

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

Шаг 1: Проверьте наличие существующих SSH-ключей

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

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

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

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

Попросите пользователя добавить открытый ключ по адресу: https://github.com/settings/keys

  • Нажмите «New SSH key»
  • Вставьте содержимое открытого ключа
  • Дайте ему название, например «vibeos-agent-<имя-машины>»

Шаг 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 "email-пользователя@example.com"

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

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

Интерактивный вход через браузер (настольный компьютер)​

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

Вход на основе токена (безголовые / 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="<токен>"

# Затем используйте в вызовах 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 _vibeos_env="${VIBEOS_HOME:-$HOME/.vibeos}/.env"; [ -f "$_vibeos_env" ] && grep -q "^GITHUB_TOKEN=" "$_vibeos_env"; then
export GITHUB_TOKEN=$(grep "^GITHUB_TOKEN=" "$_vibeos_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
remote: Permission to X deniedВозможно, токену не хватает области repo — перегенерируйте с правильными областями
fatal: Authentication failedКэшированные учётные данные могли устареть — выполните git credential reject, затем повторно аутентифицируйтесь
ssh: connect to host github.com port 22: Connection refusedПопробуйте 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: command not found + нет sudoИспользуйте метод только с git (Метод 1 выше) — установка не требуется