59 lines
6.1 KiB
Markdown
59 lines
6.1 KiB
Markdown
Судя по всему, вы хотите настроить зеркало (mirror) вашего репозитория из Gitea на GitHub, но у вас на GitHub включена двухфакторная аутентификация (2FA/MFA). Встроенные возможности Gitea лучше всего подходят для этой задачи.
|
||
|
||
Есть два основных пути, которые позволяют обойти ограничения 2FA при автоматическом зеркалировании:
|
||
|
||
### Способ 1: Использование Personal Access Token (PAT) GitHub (Рекомендуемый)
|
||
|
||
Это самый простой и надежный способ, так как Gitea изначально поддерживает аутентификацию по токену для HTTP-зеркал. Так как HTTP-протокол Git не поддерживает 2FA напрямую, токен служит заменой паролю .
|
||
|
||
1. **Создайте токен на GitHub:**
|
||
* Зайдите в настройки GitHub: `Settings` → `Developer settings` → `Personal access tokens` → `Tokens (classic)`.
|
||
* Нажмите **"Generate new token"**.
|
||
* Выберите необходимые права (`scopes`). Для публичного репозитория достаточно отметить флажок `public_repo`. Если вы зеркалируете приватный репозиторий или используете GitHub Actions, вам также могут понадобиться права `repo` и `workflow` .
|
||
* Создайте токен и **обязательно скопируйте его**. GitHub покажет его только один раз.
|
||
|
||
2. **Настройте зеркало в Gitea:**
|
||
* В вашем репозитории на Gitea перейдите в `Настройки` (Settings) → `Репозиторий-зеркало` (Mirror settings).
|
||
* В разделе "Зеркало отправки" (Push Mirror) нажмите **"Добавить новое зеркало отправки"** (Add Push Mirror).
|
||
* В поле **"Адрес удаленного репозитория Git"** (Git Remote Repository URL) укажите:
|
||
`https://github.com/<ваш_github_username>/<ваш_репозиторий>.git`
|
||
* В полях авторизации укажите:
|
||
* **Имя пользователя (Username):** Ваш GitHub username.
|
||
* **Пароль (Password):** Скопированный Personal Access Token.
|
||
* Настройте интервал синхронизации и сохраните зеркало.
|
||
|
||
### Способ 2: Использование SSH и развернутого ключа (Deploy Key)
|
||
|
||
Этот способ предпочтительнее, если вы хотите использовать SSH-ключи и не передавать токены по сети, а также если вам нужно ограничить доступ ключа только к одному репозиторию (через deploy key) .
|
||
|
||
1. **Подготовьте SSH-ключ:**
|
||
* На сервере, где работает Gitea, сгенерируйте новую пару SSH-ключей (или используйте существующую), которая будет использоваться специально для зеркалирования. Обычно это делает администратор сервера.
|
||
* Например: `ssh-keygen -t ed25519 -C "gitea-mirror" -f ~/.ssh/gitea_mirror_key`
|
||
* **Важно:** Приватный ключ должен быть доступен пользователю, от которого запущен процесс Gitea.
|
||
|
||
2. **Добавьте публичный ключ на GitHub как "Deploy Key":**
|
||
* На GitHub перейдите в ваш репозиторий → `Settings` → `Deploy keys` → `Add deploy key`.
|
||
* Вставьте содержимое публичного ключа (например, `gitea_mirror_key.pub`).
|
||
* Дайте ключу название и обязательно отметьте галочку **"Allow write access"**, так как зеркало будет отправлять (пушить) изменения.
|
||
* Нажмите `Add key`. Использование deploy key безопаснее, так как он привязан только к одному репозиторию и не имеет доступа к вашим аккаунту или другим репозиториям .
|
||
|
||
3. **Настройте зеркало в Gitea:**
|
||
* В настройках зеркала вашего Gitea-репозитория, в поле **"Адрес удаленного репозитория Git"** укажите SSH-адрес вашего GitHub репозитория:
|
||
`git@github.com:<ваш_github_username>/<ваш_репозиторий>.git`
|
||
* Поля для логина и пароля оставьте пустыми. Gitea (или Forgejo) автоматически использует SSH-ключ для аутентификации, если он настроен для пользователя, от которого запущен процесс .
|
||
* Сохраните зеркало.
|
||
|
||
1. Убедитесь, что пользователь, от которого запускается Gitea, имеет доступ к GitHub по SSH (ключ добавлен в аккаунт или как deploy key).
|
||
2. В веб-интерфейсе Gitea перейдите в настройки репозитория → **"Управление Git hooks"** (Git Hooks).
|
||
3. Отредактируйте хук **`post-receive`** и добавьте в него команду для пуша в GitHub:
|
||
```bash
|
||
#!/usr/bin/env bash
|
||
git push --mirror git@github.com:<ваш_github_username>/<ваш_репозиторий>.git
|
||
```
|
||
test
|
||
1
|
||
1
|
||
2
|
||
3
|
||
4
|