Ошибка "terminal prompts disabled" при go get для приватного репозитория GitHub
Причина проблемы
Ошибка возникает из-за того, что Go по умолчанию использует HTTPS для доступа к репозиториям GitHub, а приватные репозитории требуют аутентификации. SSH-ключи работают только при использовании SSH-протокола, который Go не использует автоматически. В результате Go пытается запросить логин/пароль интерактивно, но при автоматической сборке (например, в CI/CD) терминальные запросы отключены.
Решение: настройка Git для использования SSH
Нужно заставить Go использовать SSH вместо HTTPS для домена github.com. Это делается через конфигурацию Git:
git config --global url."git@github.com:".insteadOf "https://github.com/"
После этого Go будет автоматически заменять HTTPS-URL на SSH при загрузке модулей. Проверьте результат:
git config --global --get url."git@github.com:".insteadOf
# Должно вывести: https://github.com/
Теперь попробуйте снова:
go clean -modcache
go get github.com/mycompany/private-repo@latest
Альтернативное решение: настройка GOPRIVATE
Чтобы Go не пытался обращаться к прокси-серверам для приватных репозиториев, добавьте их в переменную GOPRIVATE:
go env -w GOPRIVATE=github.com/mycompany/*
Или для всех приватных репозиториев компании:
go env -w GOPRIVATE=github.com/mycompany/*,gitlab.com/mycompany/*
Это отключит использование GOPROXY и проверку контрольных сумм для указанных модулей.
Полный рабочий пример
Вот минимальная последовательность действий для успешной загрузки приватного модуля:
- Убедитесь, что SSH-ключ добавлен в ssh-agent:
ssh-add -l - Настройте Git на замену протокола:
git config --global url."git@github.com:".insteadOf "https://github.com/" - Укажите приватные модули:
go env -w GOPRIVATE=github.com/mycompany/* - Очистите кеш:
go clean -modcache - Выполните загрузку:
go get github.com/mycompany/private-repo@latest
Дополнительные рекомендации
- Для CI/CD: используйте Personal Access Token (PAT) с доступом к репозиториям. Настройте Git:
git config --global url."https://USERNAME:PAT@github.com/".insteadOf "https://github.com/" - Проверка подключения:
ssh -T git@github.comдолжно вывести сообщение об успешной аутентификации - Отладка: включите подробный вывод:
GIT_TERMINAL_PROMPT=1 go get -v github.com/mycompany/private-repo@latest
После настройки все команды go get, go mod download и go build будут работать с приватными репозиториями автоматически.
Использование .netrc для аутентификации через HTTPS
Если по каким-то причинам SSH не подходит (например, ограничения корпоративной сети), можно настроить аутентификацию через HTTPS с помощью файла .netrc:
- Создайте Personal Access Token (PAT) на GitHub с правами
repo. - Добавьте запись в
~/.netrc:
machine github.com
login YOUR_GITHUB_USERNAME
password YOUR_PAT_TOKEN
Убедитесь, что права доступа к файлу ограничены:
chmod 600 ~/.netrc
Теперь Go будет использовать эти данные для аутентификации при HTTPS-запросах. Этот метод удобен, если у вас уже настроены HTTPS-URL в go.mod и вы не хотите менять конфигурацию Git.
Важно: Не храните .netrc в публичных репозиториях! Для CI/CD лучше использовать переменные окружения.
Ответов пока нет.
Войдите чтобы оставить ответ
Блоги
10 лучших фреймворков Swift для веб-разработки в 2025