Як дати ім'я користувача / пароль, щоб 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.