Ошибка "terminal prompts disabled" при go get для приватного репозитория GitHub
Причина ошибки
Go по умолчанию отключает интерактивные запросы пароля (терминальные промпты) при работе с git через HTTPS. Даже если вы настроили SSH, Go может пытаться использовать HTTPS из-за того, как настроен git или GOPROXY. Ошибка возникает, когда git пытается запросить логин/пароль в терминале, но Go блокирует этот запрос.
Решение: принудительное использование SSH
Самый надёжный способ — заставить Go всегда использовать SSH для GitHub, изменив глобальную конфигурацию git:
git config --global url."git@github.com:".insteadOf "https://github.com/"
Эта команда заменяет все HTTPS-ссылки на SSH. Проверьте, что команда сработала:
git config --global --get url."git@github.com:".insteadOf
# Должно вывести: https://github.com/
Дополнительная настройка для Windows
На Windows убедитесь, что SSH-агент работает и содержит ваш ключ:
# Запуск агента (если не запущен)
Start-Service ssh-agent
# Добавление ключа
ssh-add C:\Users\ВашеИмя\.ssh\id_rsa
# Проверка
ssh -T git@github.com
# Должно вывести: Hi username! You've successfully authenticated...
Исправление GOPROXY
Если вы используете прокси (например, GoCenter или JFrog), он может пытаться закешировать приватный модуль. Отключите прокси для приватных репозиториев:
go env -w GOPRIVATE=github.com/myorg/*
Также можно указать переменную окружения:
export GOPRIVATE=github.com/myorg/* # Linux/macOS
set GOPRIVATE=github.com/myorg/* # Windows CMD
$env:GOPRIVATE="github.com/myorg/*" # PowerShell
Полный рабочий пример
# 1. Настройка SSH (один раз)
git config --global url."git@github.com:".insteadOf "https://github.com/"
# 2. Исключение приватных модулей из прокси
go env -w GOPRIVATE=github.com/myorg/*
# 3. Очистка кеша (если ранее были ошибки)
go clean -modcache
# 4. Повторный запуск
go get github.com/myorg/myrepo@latest
Если всё ещё не работает
- Проверьте, что репозиторий существует и у вас есть к нему доступ
- Убедитесь, что версия модуля указана корректно (можно использовать
@latest) - Попробуйте
GIT_TERMINAL_PROMPT=1 go get ...— если запросит пароль, значит проблема именно в SSH - На Windows может потребоваться перезапустить терминал после изменений переменных окружения
Альтернативный подход: использование .netrc или GIT_ASKPASS
Если по каким-то причинам вы не можете или не хотите использовать SSH, можно настроить автоматическую аутентификацию через HTTPS с помощью файла _netrc (на Windows) или .netrc (на Linux/macOS).
Создайте файл ~/_netrc (Windows) или ~/.netrc (Linux/macOS) с содержимым:
machine github.com
login ваш_логин
password ваш_персональный_токен_доступа
Персональный токен доступа (PAT) нужно создать на GitHub: Settings → Developer settings → Personal access tokens → Generate new token. Дайте ему права repo (для приватных репозиториев).
Затем установите переменную окружения:
export GIT_ASKPASS=true # Linux/macOS
set GIT_ASKPASS=true # Windows CMD
Или используйте git config --global core.askPass /путь/к/скрипту, который будет возвращать пароль. Однако проще всего — настроить SSH, как описано в первом ответе: это более безопасно и не требует хранения токена в открытом виде.
Ответов пока нет.
Войдите чтобы оставить ответ