Как ввести команду с паролем для git pull?
Я хочу сделать эту команду в одной строке: git pull && [my passphrase]
Как это сделать?
11 ответов
Это не совсем то, что вы просили, но для http(s):
- Вы можете поместить пароль в файл.netrc (_netrc в Windows). Оттуда это будет взято автоматически. Он пошел бы в вашу домашнюю папку с 600 разрешениями.
- Вы также можете просто клонировать репо с
https://user:pass@domain/repo
но это не очень рекомендуется, так как это покажет ваш пользователь / пароль во многих местах... - новая опция - использовать помощник по учетным данным. Обратите внимание, что учетные данные будут храниться в виде открытого текста в вашей локальной конфигурации с использованием стандартного помощника учетных данных. Учетные данные помощника с Wincred также могут быть использованы на окнах.
Примеры использования для помощника учетных данных
git config credential.helper store
- хранит учетные данные неопределенно долго.git config credential.helper 'cache --timeout=3600'
- магазины на 60 минут
Для доступа по ssh вы должны использовать ssh-агент, который при необходимости предоставит ключ ssh. Это потребует генерации ключей на вашем компьютере, хранения открытого ключа на удаленном сервере и добавления закрытого ключа в соответствующее хранилище ключей.
Я нашел один способ предоставить учетные данные для соединения https в командной строке. Вам просто нужно указать полный URL для git pull и включить туда учетные данные:
git pull https://username:password@mygithost.com/my/repository
Вам не нужно, чтобы хранилище было клонировано с учетными данными, это означает, что ваши учетные данные не заканчиваются в .git/config
, (Но убедитесь, что ваша оболочка не предаст вас и сохранит командную строку в файле истории.)
Непосредственно не отвечает на вопрос, но я нашел этот вопрос, когда искал способ, по сути, не вводить пароль повторно каждый раз, когда я подключаюсь к удаленному серверу.
Что ж, git
позволяет кэшировать ваши учетные данные в течение ограниченного периода времени. Это настраивается в git config
и эта страница объясняет это очень хорошо:
https://help.github.com/articles/caching-your-github-password-in-git/
В терминале запустите:
$ git config --global credential.helper cache
# Set git to use the credential memory cache
Чтобы настроить время ожидания кэша, вы можете сделать:
$ git config --global credential.helper 'cache --timeout=3600'
# Set the cache to timeout after 1 hour (setting is in seconds)
Ваши учетные данные будут храниться в памяти в течение запрошенного периода времени.
Используя учетные данные Helper командной строки варианта:
git -c credential.helper='!f() { echo "password=mysecretpassword"; }; f' fetch origin
Ниже cmd будет работать, если у нас нет @ в пароле:git pull https://username:pass@word@mygithost.com/my/repository
Если у вас есть @ в пароле, замените его на%40, как показано ниже:git pull https://username:pass%40word@mygithost.com/my/repository
Я только что прошел через это, поэтому предоставил свой ответ, поскольку в конечном итоге я использовал токены доступа Gitlab, хотя некоторым могут потребоваться токены доступа Github
Я бы предпочел использовать SSH, но этому мешает ошибка gitlab. Ввод моего пароля в .netrc или URL-адрес не идеален. Диспетчер учетных данных необходимо перезапустить при перезагрузке сервера, что не идеально.
Поэтому я выбрал токен доступа, который можно использовать так:
git clone https://<username>:<accessToken>@gitlab.com/ownerName/projectName.git
Маркер доступа хранится с URL-адресом, поэтому это небезопасно, но более безопасно, чем использование имени пользователя: пароля, поскольку маркер доступа может быть ограничен для определенных операций и может быть легко отозван.
После клонирования (или обновления URL-адреса вручную) все ваши запросы git будут использовать токен доступа, поскольку он хранится в URL-адресе.
Эти команды могут быть полезны, если вы хотите обновить уже клонированное репо:
git remote show origin
git remote remove origin
git remote add origin https://<username>:<accessToken>@gitlab.com/ownerName/projectName.git
Вы можете просто использовать имя пользователя без необходимости использовать пароль, так как пароль будет предложен в git bash.
git pull https://username@github.com/username/myrepo
Я не нашел ответа на свой вопрос после поиска в Google и stackoverflow в течение некоторого времени, поэтому я хотел бы поделиться своим решением здесь.
git config --global credential.helper "/bin/bash /git_creds.sh"
echo '#!/bin/bash' > /git_creds.sh
echo "sleep 1" >> /git_creds.sh
echo "echo username=$SERVICE_USER" >> /git_creds.sh
echo "echo password=$SERVICE_PASS" >> /git_creds.sh
# to test it
git clone https://my-scm-provider.com/project.git
Я сделал это и для Windows. Полный ответ здесь
Если вы хотите сделать это в сценарии CI/CD на Gitlab (gitlab-ci.yml
). Вы могли бы использовать
git pull $CI_REPOSITORY_URL
что будет примерно так:
git pull https://gitlab-ci-token:[MASKED]@gitlab.com/gitlab-examples/ci-debug-trace.gi
И я почти уверен, что используемый им токен является эфемерным токеном для каждого задания, поэтому дыра в безопасности с помощью этого метода значительно сокращается.
Обратите внимание, что способ, которым git credential helper "store" будет хранить незашифрованные пароли, изменяется в Git 2.5+ (2 квартал 2014 года).
Смотрите коммит 17c7f4d от Junio C Hamano ( gitster
)
credential-xdg
Настроить образец "
store
msgstr "бэкэнд помощника по учетным данным для определения местоположения файла конфигурации XDG, если он указан.
Док сейчас скажет:
Если не указано:
- учетные данные будут искать из
~/.git-credentials
а также$XDG_CONFIG_HOME/git/credentials
, а также- учетные данные будут написаны
~/.git-credentials
если он существует, или$XDG_CONFIG_HOME/git/credentials
если он существует, а первый нет.
Вы можете просто сделать это:
eval $(ssh-agent -s)
echo "password" | ssh-add ~/.ssh/id_rsa
git pull origin master