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

317

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

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

Leem.fin
источник
6
Ответ доступен здесь: stackoverflow.com/questions/6565357/…
kbdjockey
3
Короче говоря: для github, просто перейдите по этим двум ссылкам help.github.com/articles/generating-ssh-keys help.github.com/articles/changing-a-remote-s-url
JRun
для bitbucket, пожалуйста, перейдите по этой ссылке
JDP

Ответы:

346

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

Вот прохождение по генерации замазки для вышеуказанных шагов

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] Этот раздел включает в себя ответ Эрика П

Первый ноль
источник
3
Я запустил шаг 1 и шаг 2 в Ubuntu, но он по-прежнему запрашивает у меня u_id passwd. Я также запустил: ssh -T git@github.com. Все тот же. Что делать?
Радхика
4
@Rads Вы пробовали другой ответ, Эрик П ?
лет»
2
@dialex Он имел в виду человека, который управляет удаленным хранилищем git.
продавец
5
git remote set-url origin git + ssh: //git@github.com/username/reponame.git эта команда полезна для меня.
Искусственный
2
Это сработало для меняgit remote set-url origin git@github.com:/username/projectname.git
Курт
181

Постоянная аутентификация в репозиториях 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 часа) .

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

Джей Патель
источник
4
Спасибо. Не могли бы вы объяснить, что делает команда config? Интересно, почему он даже не спрашивает у меня пароль в первый раз, когда я нажимаю на репо.
HelloWorldNoMore
1
@vivoconunxino Возможно, потому что это небезопасно. С gitman-страницы: «Использование этого помощника сохранит ваши пароли в незашифрованном виде на диске, защищенные только разрешениями файловой системы».
cmaster - восстановить
15
В этом ответе отсутствует предупреждение о том, что storeпомощник по учетным данным хранит пароль на диске в незашифрованном виде.
cmaster - восстановить
1
@DavidRTribble: установить его в кэш? Или удалите соответствующий файл, см. Git-scm.com/docs/git-credential-store
serv-inc
1
@DavidRTribble: лучше:git config --unset credential.helper
serv-inc
116

Если у вас уже настроены ключи 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
Эрик П
источник
Это то, что исправило мою проблему после того, как я использовал git initлокально, а затем попытался нажать после добавления пульта из нового репозитория на веб-сайте GitHub.
Шелдонкрегер
1
Не уверен, почему это не является частью принятого ответа. Спасибо!
jwalk
1
Принятый ответ должен состоять из фактического принятого ответа, плюс этот.
Puce
3
Вы можете опустить "git + ssh: //" и просто использоватьgit@github.com/username/reponame.git
Иван Шулев
1
@IvanShulev Сначала я попробовал без git + ssh и не сработало
Антонелло
40

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

$ git push --repo https://name:password@bitbucket.org/name/repo.git
Павел
источник
37
Или вы можете установить это по умолчанию с помощьюgit remote set-url origin https://name:password@github.com/repo.git
ACyclic
Я отмечаю, что установка URL name@github.com/....gitтоже просто работает, если вы не возражаете против того, чтобы каждый раз придираться к паролю.
timday
Для пользователей GitHub, git push --repo https://github.com/Username/repo он работает без .git расширения
Pe Dro
24

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

Вы можете использовать git-credential-store через

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. Запуск в командной строке будет включить эту функцию: git config --global credential.helper osxkeychain. Вам нужно будет сохранить учетные данные в связке ключей, также используя приложение связки ключей.
  • Если вы используете Windows, вы можете установить помощника под названием «Git Credential Manager для Windows». Это похоже на описанный выше помощник «osxkeychain», но использует хранилище учетных данных Windows для управления конфиденциальной информацией. Его можно найти по адресу https://github.com/Microsoft/Git-Credential-Manager-for-Windows . [подчеркивает мой]
Serv-вкл
источник
Для Windows credential.helper cacheне работает. Так и должно быть git config --global credential.helper wincred.
Пауло Мерсон
1
Это полезно, когда вы вынуждены использовать https. Мой git на сервере зависает, если я использую ssh, поэтому у меня нет опции SSH-ключей.
Шридхар Сарнобат
8

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

git@github.com:org/repo.git  

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

ишан
источник
6

Шаг 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-адрес 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

Это оно.

Анил Агравал
источник
5

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

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

git config credential.helper store

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

TrollAxeThrower
источник
3

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

dsmryder
источник
3

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

git config --global credential.helper wincred

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

https://help.github.com/articles/caching-your-github-password-in-git/
Кришна
источник
3

Насколько я знаю, есть просто два безопасных способа: 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://git@github.com/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как уже упоминалось, ваши незашифрованные пароли будут просто храниться в виде простого текста, под ~/.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://git@github.com/username/reponame.git.

Hearen
источник
2

Мое решение для 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

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

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

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

ВНИМАНИЕ: это по своей природе небезопасно, потому что:

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

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

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

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

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


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

git remote set-url --push origin https://<username>@github.com/<repo>
radfast
источник
Что делать, если пароль имеет @, это нарушает командный пароль после @ как часть сервера git?
Пранав Сингх
Если ваш пароль содержит «@», вы здесь, извините. Вы можете изменить свой пароль?
Радфаст
Необходимо подать запрос на изменение пароля, так как я делал автоматизацию для Continuous Integration с учетной записью службы (не личной). Прямо сейчас использовал SSH Keys для безопасного входа в систему
Pranav Singh,
1

Все это возникает потому, что 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: passs123@192.168.0.1/proj.git -> http: \\ / \\ / kris: passs123@192.168.0.1 \\ / 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. Выполните очистку, как в предыдущем разделе. Не пропусти это.
Кришна
источник
0

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

RageZ
источник
0

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

> ssh-keygen.exe
> ssh-copy-id [username]@[GIT_server]
EquipDev
источник