it-roy-ru.com

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

Я git Push свою работу в удаленном хранилище Git.

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

252
Leem.fin

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-репозиторий и у вас есть права администратора, перейдите в settings и нажмите «добавить ключ SSH». Скопируйте содержимое вашего ~/.ssh/id_rsa.pub в поле, помеченное как «Ключ».

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

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

    scp ~/.ssh/id_rsa.pub [email protected]_IP:~/.ssh/authorized_keys/id_rsa.pub

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

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

git+ssh://[email protected]/username/reponame.git

в отличие от

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

Чтобы увидеть URL репо, запустите:

git remote show Origin

Вы можете изменить URL с помощью:

git remote set-url Origin git+ssh://[email protected]hub.com/username/reponame.git

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

270
First Zero

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

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

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

Username for 'https://github.com': <USERNAME>
Password for 'https://[email protected]': <PASSWORD>

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

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

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

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

144
Jay Patel

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

git+ssh://[email protected]/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://[email protected]/username/reponame.git
106
Eric P

Просто используйте опцию --repo для команды git Push. Как это:

$ git Push --repo https://name:[email protected]/name/repo.git
36
Pavel

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

Вы можете использовать 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», который кэширует учетные данные в безопасной цепочке для ключей, привязанной к вашей системной учетной записи. Этот метод хранит учетные данные на диске, и срок их действия не истекает, но они зашифрованы той же системой, в которой хранятся сертификаты HTTPS и автозаполнения Safari.
  • Если вы используете Windows, вы можете установить помощник под названием «Git Credential Manager для Windows». Это похоже на помощник «osxkeychain», описанный выше, но использует хранилище учетных данных Windows для управления конфиденциальной информацией. Его можно найти по адресу https://github.com/Microsoft/Git-Credential-Manager-for-Windows . [подчеркивает мой]
14
serv-inc

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

[email protected]:org/repo.git  

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

8
ishan

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

git config --global credential.helper wincred

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

5
Daniel

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

git config credential.helper store

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

4
TrollAxeThrower

В операционной системе 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
3
Ayejuni Ilemobayo Kings

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

3
dsmryder

Мое решение для Windows:

  1. Щелкните правой кнопкой мыши на каталог, чтобы нажать и выберите «Git Bash Here».
  2. ssh-keygen -t rsa (нажмите ввод для всех значений)
  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 => Сохранить
2
Мони Мон

Выполнение команды ниже решило проблему для меня.

git config --global credential.helper wincred

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

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

Шаг 1 -

Создайте ключи SSH в вашей системе Linux, используя команду ниже

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

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

Шаг 2 -

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

Шаг 3 -

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

ssh-add ~/.ssh/id_rsa 

Шаг 4 -

Теперь добавьте удаленный URL-адрес [email protected]: user_name/repo_name.git в локальное git-репо, используя следующую команду.

git remote remove Origin
git remote add Origin [email protected]:user_name/repo_name.git

Это оно.

1
Anil Agrawal

Все это возникает из-за того, что git не предоставляет опцию в командах clone/pull/Push/fetch для отправки учетных данных через канал. Несмотря на то, что он предоставляет credential.helper, он хранится в файловой системе или создает демон и т.д. Часто учетные данные 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 Origin. Наберите "git remote -v", чтобы увидеть повреждения. Исправьте это, установив URL-адрес удаленного источника без пароля. "git remote set_url Origin http: // {myuser} @ {my_repo_ip_address}/{myrepo_name.git}" 
  2. записал пароль в .git/logs в репозиторий. Замените все экземпляры pwd, используя команду unix, такую ​​как find .git/logs -exec sed -i 's/{my_url_with_pwd} // g' {} \; Здесь {my_url_with_pwd} - это URL с паролем. Так как URL имеет прямую косую черту, он должен быть экранирован двумя обратными косыми чертами. Например, для URL http: // kris: [email protected]/proj.git -> http: \\/\\/kris: [email protected] \\/proj.git

Если ваше приложение использует Java для выдачи этих команд, используйте ProcessBuilder вместо Runtime. Если вы должны использовать Runtime, используйте getRunTime (). Exec, который принимает массив String в качестве аргументов с аргументами/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. Выполните очистку, как в предыдущем разделе. Не пропусти это.
1
Krishna

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

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

Флаг --Push гарантирует, что это изменит URL-адрес хранилища только для команды git Push. (Вопрос, заданный в оригинальном посте, касается только команды git Push. Требование ввода имени пользователя и пароля только для операций Push является обычной настройкой для репозиториев public в GitHub. Обратите внимание, что для репозиториев private в 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>
1
radfast

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

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

Насколько я знаю, есть просто два безопасных способа: ssh или passwd, зашифрованный с использованием хранилища ключей

SSH

  1. Войдите в свой GitHub;
  2. Посетите: https://github.com/settings/keys ;
  3. Новый ключ SSH;
  4. cat ~/.ssh/id_rsa.pub, вставьте его туда, назовите и сохраните его (если у вас нет такого файла, сгенерируйте его для себя с помощью ssh-keygen -t rsa - просто Enter для всех запросов);
  5. Зайдите в свой локальный репозиторий и обновите ваш пульт с помощью git remote set-url Origin git+ssh://[email protected]/username/reponame.git - вы можете сначала проверить его с помощью git remote -v);
  6. Вот, пожалуйста, просто touch t; git add t; git commit -m "test"; git Push и подтвердите «да», чтобы насладиться миром без пароля.

passwd зашифрован с использованием хранилища ключей

Если вы просто используете git config --global credential.helper store, как уже упоминалось, ваши пароли unencrypted будут просто сохранены в виде обычного текста в ~/.git-credentials, что на первый взгляд небезопасно. 

Попробуйте зашифровать как

Sudo apt-get install libgnome-keyring-dev
Sudo make --directory=/usr/share/doc/git/contrib/credential/gnome-keyring
git config --global credential.helper /usr/share/doc/git/contrib/credential/gnome-keyring/git-credential-gnome-keyring

git config --global credential.helper store

В этом случае вы используете https://[email protected]/username/reponame.git

0
Hearen

Вам нужно настроить закрытый ключ SSH, вы можете просмотреть эту страницу , как выполнить настройку на Mac, если вы используете Linux, руководство должно быть почти таким же, в Windows вам понадобится такой инструмент, как MSYS .

0
RageZ