Как избежать указания имени пользователя и пароля при каждом нажатии git? - PullRequest
272 голосов
/ 21 декабря 2011

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

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

Ответы [ 18 ]

2 голосов
/ 18 февраля 2018

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

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

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

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

git config --global credential.helper wincred

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

https://help.github.com/articles/caching-your-github-password-in-git/
2 голосов
/ 24 августа 2016

Мое решение в 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 голосов
/ 20 февраля 2019

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

SSH

  1. Войдите в свой github;
  2. Посетите: https://github.com/settings/keys;
  3. Новый ключ SSH;
  4. cat ~/.ssh/id_rsa.pub, вставьте его туда, назовите и сохраните его (если у вас нет такого файла, сгенерируйте его для себя ssh-keygen -t rsa - просто Введите для всех запросов);
  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 и подтвердите "да", чтобы насладиться без пароля world.

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.

1 голос
/ 21 августа 2016

Шаг 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: имя_пользователя / имя_процесса.git для вашего локального репозитория git, используя следующую команду.

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

Вот и все.

1 голос
/ 25 июня 2016

Все это возникает из-за того, что 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 голосов
/ 21 декабря 2011

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

0 голосов
/ 20 февраля 2017

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

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