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-ключиghCLI (если установлен) — более широкий доступ к 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"
Дерево решений:
- Если
gh auth statusпоказывает аутентификацию → всё в порядке, используйтеghдля всего - Если
ghустановлен, но не аутентифицирован → используйте метод «gh auth» ниже - Если
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 выше) — установка не требуется |