Як дати ім'я користувача / пароль, щоб git клонував у сценарії, але не зберігав облікові дані у .git / config


31

Я клоную сховище git у такому сценарії:

git clone https://user:password@host.com/name/.git

Це працює, але моє ім’я користувача та мій пароль! тепер зберігаються в URL-адресі джерела в .git/config.

Як я можу запобігти цьому, але все-таки зробити це в сценарії (так що немає введення пароля вручну)?


Ви, ймовірно, зможете оновити походження згодом:git remote set-url origin https://host.com/name/.git
— ceejayoz

@ceejayoz Так, це можливо. Дякую за ідею. Я все ще сподіваюся на рішення, яке навіть не тимчасово зберігає облікові дані.
— Натан

4
Звичайно - використовуйте auth на основі SSH за допомогою ключа.
— ceejayoz

2
Чи є причина, що ви використовуєте https замість SSH? SSH підтримує ключі.
— mzhaase

Я розумію питання, але чому ви добре, що пароль зберігається всередині сценарію? Це однаково погано.
— Мартійн Курто

Відповіді:


20

Я використовую метод, щоб насправді використовувати git pullзамість клона. Сценарій виглядатиме так:

mkdir repo
cd repo
git init
git config user.email "email"
git config user.name "user"
git pull https://user:password@github.com/name/repo.git master

Це не збереже ваше ім’я користувача або пароль у .git/config. Однак, якщо не будуть вжиті інші кроки, ім'я користувача та пароль прямого тексту будуть видні, поки процес працює з команд, що показують поточні процеси (наприклад ps).

Ще одна пропозиція, яку я хотів би зробити (якщо ви не можете використовувати ssh) - це використовувати маркер OAuth замість простого тексту ім’я користувача / пароля, оскільки це трохи безпечніше. Ви можете створити маркер OAuth з налаштувань свого профілю: https://github.com/settings/tokens .

Тоді, використовуючи цей маркер, була б команда pull

git pull https://$OAUTH_TOKEN:x-oauth-basic@github.com/name/repo.git master

Ненавмисно я не можу використовувати автентичні маркери. Я використовую не github, а приватний сервер.
— Натан

3
Слід також зазначити, що ім’я користувача та пароль будуть видні, наприклад, psпід час запуску (хоча б, якщо ви не заважали користувачам бачити процеси один одного)
— derobert

Бали за використання присяги. Це саме те, що мені було потрібно у виробництві / постановці / розробці.
— RobotHumans

мільйон завдяки тобі приятелю. витрачені години n годин n, нарешті, ваша відповідь стала результатом. : thumbsup
— JasdeepSingh

17

Найкраще рішення IMO - використання користувальницького GIT_ASKPASSпомічника та надання пароля як іншої змінної середовища. Так, наприклад, створіть файл у git-askpass-helper.shвигляді:

#!/bin/sh
exec echo "$GIT_PASSWORD"

а потім запустити git clone https://username@hostname/repoзі змінними середовища GIT_ASKPASS=/path/to/git-askpass-helper.shта GIT_PASSWORD=nuclearlaunchcodes.

Це має перевагу в тому, що пароль також не буде видно у списку процесів.


+1 для творчого рішення. Це було б трохи безпечніше, ніж git pullрішення, і дозволить вам зберігати пароль простого тексту як секрет у вашому автоматизованому інструменті розгортання, який ви вибираєте.
— FGreg

13

Ви можете ввести свої ~/.netrcфайли підключення у свій файл. Щось у напрямку:

machine host.example.net
login bart
password eatmyshorts

Просто переконайтеся, що chmod цей файл до 600. Якщо ви використовуєте Windows, може бути корисним наступне посилання: https://stackoverflow.com/questions/6031214/git-how-to-use-netrc-file-on- windows-to-save-user-and-password

Особисто я маю тенденцію використовувати SSH-ключі в автентичних цілях (якщо вам це дозволено, звичайно).


Ну, це дозволить залишити мій пароль всередині ~ / .netrc. Я теж цього не хочу.
— Натан

2

Переглянувши десятки публікацій SO, блогів тощо, я спробував кожен метод, і ось що я придумав. Він охоплює ВСЕ.

Див . Чіт-лист Git Credentials & Private Packages

Це всі способи та інструменти, за допомогою яких ви можете надійно засвідчити git для клонування сховища без інтерактивного запиту пароля .

  • Загальнодоступні ключі SSH
    • SSH_ASKPASS
  • Токени доступу до API
    • GIT_ASKPASS
    • .gitconfig замістьOf
    • .gitconfig [обліковий запис]
    • .git-облікові дані
    • .netrc
  • Бонус: працює з приватними пакетами
    • node / npm package.json
    • вимоги python / pip / яйця.txt
    • рубінові дорогоцінні камені
    • голанг go.mod

Найкращі варіанти для зберігання в простому тексті

З того, що тут задають питання, найкращим вибором може бути або SSH-ключі, GIT_ASKPASSабо git credential storeвикористання диспетчера брелоків ОС.

Оскільки GIT_ASKPASS, мабуть, найменш зрозумілий з 3-х, я детально розповім, що тут - а інші - в шпаргалці.

GIT_ASKPASS

Як створити GIT_ASKPASSсценарій:

echo 'echo $MY_GIT_TOKEN' > $HOME/.git-askpass

Як ним користуватися:

export MY_GIT_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
export GIT_ASKPASS=$HOME/.git-askpass
git clone https://token@code.example.com/project.git

Сценарій отримує stdin у вигляді:

Password for 'scheme://host.tld':

Сценарій отримує Git ENV, такі як:

GIT_DIR=/Users/me/project/.git
GIT_EXEC_PATH=/usr/local/Cellar/git/2.19.0_1/libexec/git-core
GIT_PREFIX=

Більш детально в чіт-листи .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.