Назад | Перейти на главную страницу

Как указать имя пользователя / пароль для git clone в скрипте, но не хранить учетные данные в .git / config

Я клонирую репозиторий git в таком скрипте:

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

Это работает, но мое имя пользователя и мой пароль! теперь хранятся в исходном URL в .git/config.

Как я могу предотвратить это, но все же сделать это в сценарии (чтобы не вводить пароль вручную)?

Метод, который я использую, заключается в том, чтобы на самом деле использовать 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).

Как упоминалось в комментариях, поскольку этот метод использует HTTPS вы должны URL-кодировать любые специальные символы это также может появиться в вашем пароле.

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

Затем, используя этот токен, команда pull будет

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

ИМО лучшее решение - использовать индивидуальный GIT_ASKPASS helper и передать пароль как другую переменную среды. Так, например, создайте файл 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.

Это имеет то преимущество, что пароль также не будет отображаться в списке процессов.

Вы можете ввести свои кредиты на подключение в своем ~/.netrc файл. Что-то вроде:

machine host.example.net
login bart
password eatmyshorts

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

Лично у меня есть тенденция использовать SSH-ключи для аутентификации (если, конечно, вам разрешено).

После перехода десятки SO сообщений, блогов и т. д., я пробовал каждый метод, и это то, что я придумал. Он охватывает ВСЕ.

Видеть Шпаргалка по учетным данным и частным пакетам Git

Это все способы и инструменты, с помощью которых вы можете безопасно аутентифицировать git для клонирования репозитория. без интерактивного запроса пароля.

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

Лучшие варианты без хранения открытого текста

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

Поскольку GIT_ASKPASS, вероятно, наименее понятный из трех, я подробно расскажу об этом здесь, а остальные - в шпаргалке.

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

Скрипт получает стандартный ввод в виде:

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=

Подробнее в шпаргалка.