Как избежать спецификации имени пользователя и пароля при каждом нажатии git?

Я git push моя работа в удаленном репозитории Git.

push предложит мне ввести username и password. Я хотел бы избежать этого для каждого толчка, но как настроить, чтобы этого избежать?

18 ответов


1. Сгенерировать ключ SSH

Linux / Mac

открыть терминал для создания ssh ключей:

cd ~                 #Your home directory
ssh-keygen -t rsa    #Press enter for all values

Для Windows

(работает только если программа фиксации способна использовать сертификаты / частные и открытые ssh-ключи)

  1. используйте Putty Gen для генерации ключа
  2. экспорт ключа в виде открытого ключа SSH

здесь прохождение на putty gen для вышеуказанного шаги

2. Свяжите ключ SSH с удаленным репозиторием

этот шаг варьируется в зависимости от того, как настроен пульт дистанционного управления.

  • если это репозиторий GitHub и у вас есть права администратора, перейдите к настройки и нажмите "Добавить ключ SSH". Скопируйте содержимое вашего ~/.ssh/id_rsa.pub в поле "Ключ".

  • если ваш репозиторий управляется кем-то другим, дайте администратор id_rsa.pub.

  • если ваш удаленный репозиторий управляется вашим, вы можете использовать эту команду, например:

    scp ~/.ssh/id_rsa.pub YOUR_USER@YOUR_IP:~/.ssh/authorized_keys/id_rsa.pub

3. Установите удаленный URL-адрес в форму, поддерживающую SSH 1

если вы выполнили вышеуказанные шаги и все еще получаете запрос пароля, убедитесь, что Ваш URL-адрес РЕПО находится в форме

git+ssh://git@github.com/username/reponame.git

в отличие от к

https://github.com/username/reponame.git

чтобы увидеть URL-адрес РЕПО, запустите:

git remote show origin

вы можете изменить URL-адрес:

git remote set-url origin git+ssh://git@github.com/username/reponame.git

[1] Этот раздел включает в себя ответ от Эрик Р


постоянная аутентификация с репозиториями Git,

выполните следующую команду, чтобы включить кэширование учетных данных.

$ git config credential.helper store
$ git push https://github.com/repo.git

Username for 'https://github.com': <USERNAME>
Password for 'https://USERNAME@github.com': <PASSWORD>

использовать также следует указать кэширование истекает,

git config --global credential.helper 'cache --timeout 7200'

после включения кэширования учетных данных, он будет кэшироваться для 7200 секунд (2 часа).

Примечание: помощник учетных данных, хранящий незашифрованный пароль на локальном диске.


если вы уже настроили ключи SSH и все еще получаете запрос пароля, убедитесь, что Ваш URL-адрес РЕПО находится в форме

git+ssh://git@github.com/username/reponame.git

в противоположность

https://github.com/username/reponame.git

чтобы увидеть URL-адрес РЕПО, запустите:

git remote show origin

вы можете изменить URL с git remote set-url вот так:

git remote set-url origin git+ssh://git@github.com/username/reponame.git

просто использовать --repo опция для команды git push. Вот так:

$ git push --repo https://name:password@bitbucket.org/name/repo.git

Сохранение На Неопределенный Срок

можно использовать git-credential-store via

git config credential.helper store

, который сохраняет ваш пароль незашифрованным в файловой системе:

использование этого помощника будет хранить ваши пароли незашифрованными на диске, защищенные только разрешениями файловой системы. Если это неприемлемый компромисс безопасности, попробуйте git-credential-cache или найдите помощника, который интегрируется с безопасным хранилищем, предоставляемым вашей операционной системой система.

С тайм-аутом

использовать git-credential-cache который по умолчанию хранит пароль в течение 15 минут.

git config credential.helper cache

чтобы установить другой тайм-аут, используйте --timeout (здесь 5 минут)

git config credential.helper 'cache --timeout=300'

Безопасное Сохранение На Неопределенный Срок (OS X и Windows)

  • если вы используете Mac, Git поставляется с режим"osxkeychain", который кэширует учетные данные в secure keychain, прикрепленный к вашей учетной записи системы. Этот метод хранит учетные данные на диске, и они никогда не истекают, но они зашифрованы с той же системой, которая хранит сертификаты HTTPS и автозаполнения Safari.
  • если вы используете Windows, вы можете установите помощник под названием " Диспетчер учетных данных Git для Windows." это похоже на описанный выше помощник "osxkeychain", но использует хранилище учетных данных Windows для управления конфиденциальной информацией. Это может быть найдено вhttps://github.com/Microsoft/Git-Credential-Manager-for-Windows. [подчеркивает мое]

я использовал https-ссылку (https://github.com/org/repo.git) вместо ссылки ssh;

git@github.com:org/repo.git  

переключение решило проблему для меня!


подключите клиент git к хранилищу учетных данных ОС. Например, в Windows вы привязываете помощник учетных данных к wincred:

git config --global credential.helper wincred

есть ли способ пропустить ввод пароля при использовании https: / / на GitHub?


я использовал ответ, который предложил Павел, и это сработало для меня. Моя разница заключалась в том, чтобы сделать это, когда я добавлял пульт так:git remote add (alias) https://(name:password)@github.com/(the remote address).git


в операционной системе Windows используйте это вместо этого, это работает для меня:

https://{Username}:{Password}@github.com/{Username}/{repo}.git

например

git clone https://{Username}:{Password}@github.com/{Username}/{repo}.git

git pull https://{Username}:{Password}@github.com/{Username}/{repo}.git

git remote add origin https://{Username}:{Password}@github.com/{Username}/{repo}.git

git push origin master

мое решение в Windows:

  1. щелкните правой кнопкой мыши в каталоге, чтобы нажать и выбрать "Git Bash здесь".
  2. ssh-keygen -t rsa (нажмите Enter для всех значений)
  3. Проверьте терминала: Your public key has been saved in /c/Users/<your_user_name_here>/.ssh/id_rsa.pub
  4. копировать открытый ключ из указанного файла.
  5. перейдите в свой профиль GitHub = > настройки = > SSH и GPG ключи => новый SSH ключ = > вставьте SSH ключ там => сохранить

просто хотел указать что-то о решении, сказанном выше несколько раз:

git config credential.helper store

после этого можно использовать любую команду, для которой требуется пароль. Тебе не нужно давить. (вы также можете вытащить, например) после этого вам не нужно будет снова вводить свое имя пользователя / пароль.


все это возникает потому, что git не предоставляет опцию в командах clone/pull/push/fetch для отправки учетных данных через канал. Хотя это дает полномочия.помощник, он сохраняет в файловой системе или создает демона и т. д. Часто учетные данные GIT являются системными, и бремя их безопасности лежит на приложении, вызывающем команды git. Очень небезопасно.

вот что мне пришлось обойти. 1. Версия Git (git --version) должна быть больше или равна 1.8.3.

GIT CLONE

для клонирования используйте "git clone URL" после изменения URL-адреса из формата http://{myuser}@{my_repo_ip_address}/{myrepo_name.git} к http:/ / {myuser}: {mypwd}@{my_repo_ip_address} / {myrepo_name.git}

очистить хранилище паролей как в следующем разделе.

очистка

теперь, это пошло бы и

  1. написал пароль в git remote происхождение. Введите "git remote-v", чтобы увидеть повреждения. Исправьте это, установив URL-адрес удаленного источника без пароля. "git remote set_url origin http:/ / {myuser}@{my_repo_ip_address} / {myrepo_name.git}"
  2. записал пароль .git / logs в репозитории. Замените все экземпляры pwd с помощью команды unix, такой как find .ЖКТ/журналы -экзек СЕПГ -я с/{my_url_with_pwd}//г' {} \; Здесь {my_url_with_pwd} - это URL с паролем. Поскольку URL-адрес имеет косые черты, он должен быть экранирован двумя обратные взмахи. Например, для URL http://kris:passs123@192.168.0.1/proj.git -> http:\\/\\/kris:passs123@192.168.0.1\\/proj.git

Если приложение использует Java для выполнения этих команд, используйте ProcessBuilder вместо среды выполнения. Если необходимо использовать среду выполнения, используйте getRunTime ().exec, который принимает массив строк в качестве аргументов с /bin / bash и-c в качестве аргументов, а не тот, который принимает одну строку в качестве аргумента.

GIT FETCH/PULL/PUSH

  1. Задайте пароль в удаленном url-адресе Git как: "git remote set_url origin http:/ / {myuser}: {mypwd}@{my_repo_ip_address} / {myrepo_name.git}"
  2. выполните команду git fetch/push / pull. Вы не будет предложено ввести пароль.
  3. выполните очистку, как в предыдущем разделе. Не пропустите его.

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

git remote set-url --push origin https://<username>:<password>@github.com/<repo>

на --push флаг гарантирует, что это изменит URL-адрес репозитория для только. (Вопрос, заданный в исходном сообщении, касается только. Требование имени пользователя+пароля только для операций push является нормальная настройка для общественные репозитории на GitHub . Обратите внимание, что частная репозитории на GitHub также потребуют имя пользователя+пароль для операций извлечения и извлечения, поэтому для частного репозитория вы не захотите использовать --push flag ...)

предупреждение: это по своей сути небезопасно, потому что:

  1. ваш интернет-провайдер или любой, кто регистрирует доступ к сети, может легко см. пароль в простом тексте в URL-адрес;

  2. любой, кто получает доступ к вашему ПК, может просматривать ваш пароль с помощью git remote show origin.

вот почему использование ключа SSH является принятым ответом.

даже SSH-ключ не совсем безопасно. Любой, кто получает доступ к вашему ПК, может, например, сделать толчки, которые разрушают ваш репозиторий или - что еще хуже - push совершает тонкие изменения в вашем коде. (Все нажатые коммиты, очевидно, хорошо видны на На GitHub. Но если кто - то хотел изменить ваш код тайно, они могли --amend предыдущая фиксация без изменения сообщения фиксации, а затем принудительно нажмите его. Это было бы незаметно и довольно трудно заметить на практике.)

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


как вариант - для простоты и безопасность - вы можете поставить только ваше имя пользователя в URL, так что вам придется вводить пароль каждый раз, когда вы git push но вам не придется каждый раз давать свое имя пользователя. (Мне очень нравится этот подход, вводя пароль дает мне паузу, чтобы думать каждый раз, когда я git push, поэтому я не могу git push случайно.)

git remote set-url --push origin https://<username>@github.com/<repo>

вы должны настроить закрытый ключ SSH, вы можете просмотреть это страница, Как сделать установку на Mac, Если вы находитесь на linux руководство должно быть почти таким же, на Windows, вам понадобится инструмент, как префикса msys.


Шаг 1.

создайте SSH-ключи в вашей системе linux, используя следующую команду

ssh-keygen -t rsa -b 4096 -C "your_email"

Он будет запрашивать пароль и имя файла (по умолчанию ~/.ssh / id_rsa,~/.ssh / id_rsa.паб)

Шаг 2.

после создания файлов добавьте открытый ключ id_rsa.паб в разделе ssh учетной записи github.

Шаг 3.

на вашем компьютере добавьте закрытый ключ id_rsa в ssh-agent, используя следующую команду

ssh-add ~/.ssh/id_rsa 

Шаг 4 -

Теперь добавить удаленный url git@github.com:user_name/repo_name.git для вашего локального репозитория git, используя команду ниже.

git remote remove origin
git remote add origin git@github.com:user_name/repo_name.git

вот и все.


похоже, что, по крайней мере, при использовании TortoiseGIT в Windows, можно создать SSH-ключи и передать их на сервер GIT, используя просто:

> ssh-keygen.exe
> ssh-copy-id [username]@[GIT_server]

Я создал пустое РЕПО в github, а затем ...

git push -u origin master

вы должны настроить удаленный URL ssh, как описано выше.


запуск приведенной ниже команды решил проблему для меня.

git config --global credential.helper wincred

пожалуйста, обратитесь к приведенной ниже документации github:

https://help.github.com/articles/caching-your-github-password-in-git/