git clone - не замість запитів на отримання облікових даних


14

Під час клонування сховищ git в автоматизованих інструментах - передніх веб-сторінках, системах CI, іноді виклик клона git відкриває підказку із запитом імені користувача та пароля (наприклад, при клонуванні неіснуючої репозиторії Github або на новому вузлі відсутніх ключів ssh ).

Як зробити так, щоб git просто не працював (бажано, щоб було зрозуміло повідомлення про помилку та код виходу), а не чекати, коли серверний процес дасть йому ім’я користувача та пароль?


У нас встановлений багатосерверний Дженкінс, який роздратовано сидить, чекаючи підказки, поки не буде вбито, якщо він працює на новому сервері, не вистачаючи клавіш ssh - спосіб налаштувати, що він просто вийде з ладу і ненульовий код виходу буде бути корисним.
Danny Staple

Якщо режим вилучення всіх "пакетних" міг би бути використаний і для заборони запитів для хост-ключів - це було б ідеально.
Danny Staple

Вони обидва пов'язані - намагається зібрати їх разом - serverfault.com/questions/61915 / ... , stackoverflow.com/questions/7772190 / ... .
Danny Staple

Відповіді:


15

У git версії 2.3 є змінна середовища, GIT_TERMINAL_PROMPTяка при встановленні 0відключить запит на отримання облікових даних.

Ви можете отримати більше інформації про це man git(після оновлення до версії git 2.3) або в цій публікації блогу на github .

Приклади:

  • git clone https://github.com/some/non-existing-repo підкаже ім'я користувача та пароль
  • GIT_TERMINAL_PROMPT=0 git clone https://github.com/some/non-existing-repo не вдасться без запиту на ім’я користувача та пароль

Розчаровує бути знову тут https git-клоном, на сервері el7 з git 1.8. Перевіримо, чи є оновлення до 2,0 з іншого репо, це варіант.
Danny Staple

0

Якщо ви використовуєте ssh-аутентифікацію та на Linux, то ви можете створити заміну команди ssh, щоб відключити це.

Створіть файл під назвою "sshnoprompt.sh" за допомогою:

ssh -oBatchMode=yes $@

Зробіть цей файл виконуваним за допомогою chmod +x sshnoprompt.sh

Потім при запуску git:

GIT_SSH="sshnoprompt.sh" git clone foo@dummyserver:not_a_repo

І це не дозволить жодним інтерактивним підказкам git або запитанням - він не повинен мати можливість запитувати користувача нічого.


0

Працює з git версії 1.8.3.1;

git clone -c core.askPass $echo url/or/path/to/git/repo

Конфігурація core.askPassпрацює за допомогою передачі керування обробкою облікових даних вищезазначеній програмі. Однак оскільки $echoне можу зробити нічого, крім виводу, спроба клонування негайно завершується невдачею і застосовується відповідне перенаправлення bash. Цей код викликається лише у тому випадку, якщо сховище git є приватним, і виведе помилка виводу, вказуючи, що аутентифікація не вдалася до конкретного сховища. Ви можете перевірити це на https://github.com/git/gitвідкритому сховищі на приватному сховищі, про яке ви знаєте.

Щоб підсолодити угоду, вам навіть не потрібно було б посилатися на програму, як echoв першу чергу. Просто передача конфігурації git -c core.askPassбез наступного вводу все ще спричинить збій у випадку, якщо сховище буде приватним, оскільки код не знатиме, до якої програми завантажувати обробку даних з обліковими записами. Хоча це, безумовно, старіший і простіший метод, ніж інші, про які йдеться тут, я не знаю, чи він матиме такий же ефект у старих версіях git.


Ви дещо правильно, але дуже помиляєтесь. Перш за все, у вашому випадку $echo- це змінна посилання, яка (не встановлюється) розширюється на порожній рядок, тому це абсолютно безглуздо. Якщо ви помістите echoтуди (без знака долара), це також було б невірно, оскільки це було б інтерпретовано як розташування сховища. Це повинно було бути -c core.askPass=echo.
Michał Górny

-1

Залежно від того, як ви працюєте з git, перенаправлення stdin або stdout, щоб вони не були підключені до терміналів, зупинить git від запитів на деталі та просто спричинить його до помилки.

Це також дозволить виявити помилки (або принаймні журнали) у веб-службі.


Як саме я б пішов робити це? Спершу намагаючись досягти цього у Баша, і те, </dev/nullі інше nohup .. &, здається, не працює.
Tin Tvrtković

Ця відповідь не корисна без конкретного прикладу, як цього досягти. Тим більше, що "очевидні" методи не працюють, як було сказано вище.
Michał Górny

@ MichałGórny Я кілька років тому не бачив питання про ОП, але в запитанні (ОС, набір інструментів) не було достатньо інформації, щоб можна було відповісти на це. Перенаправлення stdin і stdout. Git сильно змінився з часу запитання (наприклад, у Windows він спливає зовнішні діалоги для облікових даних, якщо ви підключаєтесь до Azure DevOps), тож вам краще використовувати змінну середовища, вказану у верхній відповіді
Matthew Steeples
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.