Как указать имя пользователя и пароль при запуске "git clone git@remote.git"?
Я знаю, как предоставить имя пользователя и пароль для запроса https:
git clone https://username:password@remote
Но я хотел бы знать, как предоставить имя пользователя и пароль для пульта, например:
git clone git@remote.git
Я пытался так:
git clone username:password@git@remote.git
git clone git@username:password@remote.git
git clone git@remote.git@username:password
Но они не сработали.
17 ответов
git clone https://username:password@github.com/username/repository.git
Этот способ работал для меня из репозитория GitHub
Редактировать на основе комментария Michael_Scharf:
Вы можете пропустить пароль, чтобы он не регистрировался в вашем файле истории bash:
git clone https://username@github.com/username/repository.git
Он попросит вас ввести пароль
user@host:path/to/repo
формат говорит Git использовать ssh для входа в систему host
с именем пользователя user
, От git help clone
:
Альтернативный scp-подобный синтаксис также может использоваться с протоколом ssh:
[user@]host.xz:path/to/repo.git/
Часть перед @
это имя пользователя, а метод аутентификации (пароль, открытый ключ и т. д.) определяется с помощью ssh, а не Git. Git не может передать пароль в ssh, потому что ssh может даже не использовать пароль в зависимости от конфигурации удаленного сервера.
использование ssh-agent
чтобы не вводить пароли все время
Если вы не хотите вводить свой пароль ssh все время, типичное решение состоит в том, чтобы сгенерировать пару открытый / закрытый ключ, поместите открытый ключ в свой ~/.ssh/authorized_keys
файл на удаленном сервере, и загрузите свой закрытый ключ в ssh-agent
, Также см. Настройка Git через SSH для однократной регистрации, страница справки GitHub по парольным фразам ключей ssh, документация ssh от gitolite и документация ключей ssh от Heroku.
Выбор между несколькими учетными записями на GitHub (или Heroku или...)
Если у вас есть несколько учетных записей в таких местах, как GitHub или Heroku, у вас будет несколько ключей ssh (как минимум по одной на учетную запись). Чтобы выбрать учетную запись, под которой вы хотите войти, вы должны указать ssh, какой закрытый ключ использовать.
Например, предположим, у вас было две учетные записи GitHub: foo
а также bar
, Ваш ключ SSH для foo
является ~/.ssh/foo_github_id
и ваш ключ ssh для bar
является ~/.ssh/bar_github_id
, Вы хотите получить доступ git@github.com:foo/foo.git
с вашим foo
счет и git@github.com:bar/bar.git
с вашим bar
учетная запись. Вы бы добавили следующее к вашему ~/.ssh/config
:
Host gh-foo
Hostname github.com
User git
IdentityFile ~/.ssh/foo_github_id
Host gh-bar
Hostname github.com
User git
IdentityFile ~/.ssh/bar_github_id
Затем вы должны клонировать два хранилища следующим образом:
git clone gh-foo:foo/foo.git # logs in with account foo
git clone gh-bar:bar/bar.git # logs in with account bar
Избегать SSH в целом
Некоторые сервисы предоставляют доступ HTTP как альтернативу ssh:
GitHub:
https://username:password@github.com/username/repository.git
Gitorious:
https://username:password@gitorious.org/project/repository.git
Heroku: см. Эту статью поддержки.
ВНИМАНИЕ: Добавление вашего пароля к URL-адресу клона приведет к тому, что Git сохранит ваш открытый текст в .git/config
, Чтобы надежно сохранить пароль при использовании HTTP, используйте помощник по учетным данным. Например:
git config --global credential.helper cache
git config --global credential.https://github.com.username foo
git clone https://github.com/foo/repository.git
Вышеуказанное заставит Git запрашивать ваш пароль каждые 15 минут (по умолчанию). Увидеть git help credentials
для деталей.
Следуйте этим аргументам, чтобы заменить их на особые случаи ur, если они создают проблему:
! # $ & ' ( ) * + , / : ; = ? @ [ ]
% 21% 23% 24% 26% 27% 28% 29% 2A% 2B% 2C% 2F% 3A% 3B% 3D% 3F% 40% 5B% 5D
Так, например,
фактический URL: https://usern@me:p@ssword@git/reponame.git
URL-адрес решения для использования: https://usern%40me:p%40ssword@git/reponame.git
В комментариях к ответу @Bassetassen @plosco упомянул, что вы можете использовать git clone https://<token>@github.com/username/repository.git
клонировать из GitHub по крайней мере. Я подумал, что расскажу о том, как это сделать, на случай, если кто-нибудь встретит этот ответ, как я, пытаясь автоматизировать клонирование.
В GitHub есть очень удобное руководство о том, как это сделать, но оно не охватывает, что делать, если вы хотите включить все это в одну строку для целей автоматизации. Он предупреждает, что добавление токена к URL-адресу клона сохранит его в виде открытого текста в .git/config
, Очевидно, что это риск для безопасности почти в каждом случае использования, но, поскольку я планирую удалить репо и отозвать токен, когда я закончу, мне все равно.
1. Создайте токен
У GitHub есть целое руководство о том, как получить токен, но вот TL;DR.
- Выберите " Настройки"> "Настройки разработчика"> "Жетоны личного доступа" ( вот прямая ссылка)
- Нажмите "Создать новый токен" и снова введите свой пароль. ( Вот еще одна прямая ссылка)
- Задайте для него описание / имя, проверьте разрешение "РЕПО" и нажмите кнопку "Создать токен" внизу страницы.
- Скопируйте новый токен, прежде чем покинуть страницу
2. Клонировать репо
То же, что команда @plosco, git clone https://<token>@github.com/<username>/<repository>.git
просто замени <token>
, <username>
а также <repository>
с любой вашей информацией.
Если вы хотите клонировать его в определенную папку, просто вставьте адрес папки в конце следующим образом: git clone https://<token>@github.com/<username>/<repository.git> <folder>
, где <folder>
есть, как вы уже догадались, папка для клонирования! Вы можете, конечно, использовать .
, ..
, ~
и т.д. здесь, как вы можете в другом месте.
3. Не оставляйте следов
Не все это может быть необходимо, в зависимости от того, насколько чувствительным является то, что вы делаете.
- Вы, вероятно, не хотите оставлять этот токен без присмотра, если у вас нет намерения использовать его в течение некоторого времени, поэтому вернитесь на страницу токенов и нажмите кнопку удаления рядом с ним.
- Если вам больше не нужен репо, удалите его
rm -rf <folder>
, - Если вам снова нужен репо, но вам не нужно его снова автоматизировать, вы можете удалить пульт, выполнив
git remote remove origin
или просто удалите токен, запустивgit remote set-url origin https://github.com/<username>/<repository.git>
, - Очистите историю bash, чтобы токен не оставался там зарегистрированным. Есть много способов сделать это, посмотрите этот вопрос и этот вопрос. Однако может быть проще просто добавить все вышеупомянутые команды с пробелом, чтобы предотвратить их сохранение с самого начала.
Обратите внимание, что я не профессионал, поэтому вышеизложенное может быть небезопасным в том смысле, что не останется никаких следов для какой-либо криминалистической работы.
Сообщение от 13 августа 2021 г. необходимо использовать
Git Clone
https://username:token@github.com/username/repository.git
Чтобы сгенерировать токен:
Настройки >> Настройки разработчика >> токены личного доступа >> сгенерировать новый токен
- Git Push
После успешного клонирования, в следующий раз, когда вы это сделаете
git push
вам не придется снова упоминать имя пользователя. вы можете подтвердить это, открыв
.git/config
файл в блокноте он покажет
[remote "origin"]
url = https://username:tokenxxxxxxxxxx@github.com/username/repo.git
Хотя есть много ответов, я сталкиваюсь с повторяющейся проблемой, когда в имени пользователя или пароле есть специальные символы.
URL-адрес закодирует ваше имя пользователя и пароль для git, а затем используйте его как часть самого URL-адреса (когда нет проблем с безопасностью).
Скажем, значение имени пользователя в кодировке URL
"пользователь +1" - это пользователь%2B1
и URL-кодированное значение пароля
"Добро пожаловать @1234" - это добро пожаловать%401234
Тогда ваш URL-адрес GIT Clone будет выглядеть так:
git clone https://user%2B1:Welcome%401234@actual-git-url-for-the-repo
работает отлично, тогда какgit clone https://user+1:Welcome%401234@actual-git-url-for-the-repo/ дает 403 ошибки
Надеюсь это поможет.
На всякий случай захочу URL закодировать онлайн: https://www.urlencoder.org/
Чтобы клонировать репозиторий, сначала вы должны сгенерировать токен доступа (вы больше не можете использовать свой пароль для входа), а затем клонировать репозиторий с этим сгенерированным токеном.
Сгенерируйте токен доступа:
github:
Настройки> Настройки разработчика> токены личного доступа> создать новый токен
Bitbucket:
Личные настройки> Пароли приложений> создать пароль приложения
Клонируем репозиторий:
гитхаб:
$ git clone https://YOUR-USERNAME:GENERATED-TOKEN@github.com/YOUR-USERNAME/YOUR-REPOSITORY
битбакет:
git clone https://YOUR-USERNAME@bitbucket.org/YOUR-REPOSITORY
Он предложит вам сгенерированный токен.
В Windows следующие шаги должны повторно вызвать окно входа в GitHub, когда git clone
ING:
- Начальное меню поиска для "Диспетчера учетных данных"
- Выберите "Учетные данные Windows"
- Удалите все учетные данные, связанные с Git или GitHub
Если вы используете http/https
и вы хотите ПОЛНОСТЬЮ АВТОМАТИЗИРОВАТЬ процесс, не требуя какого-либо пользовательского ввода или каких-либо пользовательских подсказок (например, внутри конвейера CI/CD), вы можете использовать следующий подход, используяgit credential.helper
GIT_CREDS_PATH="/my/random/path/to/a/git/creds/file"
# Or you may choose to not specify GIT_CREDS_PATH at all.
# See https://git-scm.com/docs/git-credential-store#FILES for the defaults used
git config --global credential.helper "store --file ${GIT_CREDS_PATH}"
echo "https://alice:${ALICE_GITHUB_PASSWORD}@github.com" > ${GIT_CREDS_PATH}
где вы можете установить ALICE_GITHUB_PASSWORD
переменная окружения из предыдущей команды оболочки или из конфигурации вашего конвейера и т. д.
Помните, что git-credential-helper на основе "хранилища" хранит пароли и значения в виде обычного текста. Поэтому убедитесь, что у вашего токена / пароля очень ограниченные разрешения.
Теперь просто используйте https://alice@github.com/my_repo.git везде, где вашей автоматизированной системе необходимо получить репо - она будет использовать учетные данные дляalice
в github.com
как хранилище с помощью git-credential-helper.
Я предпочитаю использовать среду GIT_ASKPASS для предоставления учетных данных HTTPS для git.
При условии, что логин и пароль экспортируются в
USR
и переменных, следующий скрипт не оставляет следов пароля в истории и на диске + он не уязвим для специальных символов в пароле:
GIT_ASKPASS=$(mktemp) && chmod a+rx $GIT_ASKPASS && export GIT_ASKPASS
cat > $GIT_ASKPASS <<'EOF'
#!/bin/sh
exec echo "$PSW"
EOF
git clone https://${USR}@example.com/repo.git
NB: обратите внимание на одинарные кавычки вокруг маркера heredoc.
'EOF'
что означает, что временный скрипт буквально держит
$PSW
символы, а не пароль / расширенное значение
PSW
Переменная
git config --global core.askpass
Запустите это, прежде чем клонировать таким же образом, должно быть исправлено!
Это отличный вопрос о переполнении стека, и ответы были очень поучительными, так что я смог решить досадную проблему, с которой недавно столкнулся.
Организация, в которой я работаю, использует Atlassian's BitBucket
product (не Github), по сути, их версия GitHub, так что репозитории могут быть полностью защищены локально. Я столкнулся с той же проблемой, что и @coordinate, поскольку мой пароль требовался для нового репозитория, который я проверял. Мои учетные данные были сохранены глобально для всехBitBucket
проекты, поэтому я не уверен, что привело к потере учетных данных.
Короче говоря, я смог ввести следующую команду GIT (указав только мое имя пользователя), которая затем побудила диспетчер учетных данных Git запросить у меня пароль, который я затем смог сохранить.
git clone https://user@code.domain.org/git/[organization]/[team]/[repository.git]
ПРИМЕЧАНИЕ: вложенные пути к каталогам в квадратных скобках просто относятся к внутренним ссылкам и будут отличаться для вас!
URL-адреса HTTPS Git
git clone https://user:password@host
Включение пароля в URL-адрес Git считается плохой практикой , поскольку это может привести к непреднамеренному раскрытию учетных данных в файлах конфигурации и истории команд. Он также ломается, если пароль меняется.
Более безопасным и надежным является использование помощника по созданию учетных данных, такого как Git Credential Manager (включен в Git для Windows) или git-credential-oauth (включен в несколько дистрибутивов Linux).
При первой аутентификации помощник открывает окно браузера для хоста. Последующая аутентификация в течение срока хранения не является интерактивной.
URL-адреса SSH Git
Для аутентификации SSH требуется ключ SSH. Этот файл имеет размер тысячи байт; вы не можете включить его в URL. Вы можете включить имя пользователя в URL-адрес:
git clone ssh://user@host
Если ключ SSH защищен парольной фразой, вы можете использовать ssh-агент, чтобы запомнить его .
Пользовательский вспомогательный сценарий Git во время клонирования:
Использование только переменных среды
вр; доктор
Один лайнер
git -c credential.username=${CI_GIT_USER} -c credential.helper='!f() { test \"$1\" = get && echo "password=${CI_GIT_PASSWORD}"; }; f' clone --branch $CI_GIT_BRANCH $CI_GIT_URL $CI_GIT_ROOT
Многострочный
git -c credential.username=${CI_GIT_USER} \
-c credential.helper='!f() { test \"$1\" = get && echo "password=${CI_GIT_PASSWORD}"; }; f' \
clone --branch $CI_GIT_BRANCH $CI_GIT_URL $CI_GIT_ROOT
Пользовательские скрипты
Изgit credentials
документы:
# or you can specify your own shell snippet
[credential "https://example.com"]
username = your_user
helper = "!f() { test \"$1\" = get && echo \"password=$(cat $HOME/.secret)\"; }; f"
Не очень хорошо, поскольку он загружается из файла, но это может интерполировать переменную среды.
Git Config во время клонирования
Малоизвестный факт — указание конфигурации git, когда репозиторий git еще даже не создан, например, при клонировании. Вы можете указатьgit -c key=value clone <git_url_here>
Я знаю это, потому что мне нужно было заставить во время клонирования для проблем сервера и клиента.
Почему работает собственный скрипт?
Аgit credential.helper
нужно ответить либо на ,store
илиerase
команды и читает из потока.
!f() { test \"$1\" = get && echo \"password=${CI_GIT_PASSWORD}\"; }; f
-
test \"$1\" = get
это проверяет, была ли командаget
-
&&
оператор управления выполнит следующую команду только в том случае, если предыдущая команда имела статус завершения True (который, как ни странно, должен быть равен нулю, потому что это означает, чтоEXIT_SUCCESS
), ненулевой код выхода — Falsey (обычно какой-то код ошибки). -
echo \"password=${CI_GIT_PASSWORD}\";
тотstdout
поток имеетkey=value
ответ. -
!f() { ... }; f
Вся эта внешняя оболочка определяет команду и запускает ее.
Ресурсы
- https://git-scm.com/docs/gitcredentials#_custom_helpershttps://git-scm.com/docs/gitcredentials#_custom_helpers
- https://git-scm.com/docs/git#Documentation/git.txt--cltnamegtltvaluegthttps://git-scm.com/docs/git#Documentation/git.txt--cltnamegtltvaluegt
- https://git-scm.com/docs/gitcredentials#Documentation/gitcredentials.txt-codegetcodehttps://git-scm.com/docs/gitcredentials#Documentation/gitcredentials.txt-codegetcode
- git принимать самозаверяющие центры сертификацииКак я могу заставить git принимать самозаверяющий сертификат?
Если у вас есть учетные данные, хранящиеся в каком-либо помощнике по учетным данным, но не настроенный помощник по учетным данным, чтобы он был активен глобально, вы можете клонировать следующим образом:
git clone https://git.example.com/ns/repo.git --config=credential.helper=store
Это устанавливает конфигурацию credential-helper локально (только для нового репо) перед клонированием.
Большую часть времени это работает хорошо.
git clone https://username:password@github.com/username/repository.git
Однако существует другой сценарий, когда кто-то приглашает вас в репозиторий своей организации. и допустим, вот как будет выглядеть URL-адрес репо.
https://github.com/organization/repo.git
Теперь в этом сценарии следующий URL-адрес
https://имя пользователя: пароль@github.com/имя пользователя/repository.git
не будет работать. Вам необходимо внести в него некоторые изменения следующим образом.
https://username:password@github.com/organization/repository.git
Надеюсь, это кому-то поможет.