Как указать имя пользователя и пароль при запуске "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.

  1. Выберите " Настройки"> "Настройки разработчика"> "Жетоны личного доступа" ( вот прямая ссылка)
  2. Нажмите "Создать новый токен" и снова введите свой пароль. ( Вот еще одна прямая ссылка)
  3. Задайте для него описание / имя, проверьте разрешение "РЕПО" и нажмите кнопку "Создать токен" внизу страницы.
  4. Скопируйте новый токен, прежде чем покинуть страницу

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 cloneING:

  • Начальное меню поиска для "Диспетчера учетных данных"
  • Выберите "Учетные данные 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Вся эта внешняя оболочка определяет команду и запускает ее.

Ресурсы

Если у вас есть учетные данные, хранящиеся в каком-либо помощнике по учетным данным, но не настроенный помощник по учетным данным, чтобы он был активен глобально, вы можете клонировать следующим образом:

      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

Надеюсь, это кому-то поможет.

Другие вопросы по тегам