Я клонирую репозиторий 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 для клонирования репозитория. без интерактивного запроса пароля.
Из того, что здесь спрашивают, ключи SSH, GIT_ASKPASS
, или git credential store
использование диспетчера связки ключей ОС может быть лучшим выбором.
Поскольку 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=
Подробнее в шпаргалка.