Як я можу уникати зазначення імені користувача та пароля при кожному натисканні git?


317

Я git pushпрацюю у віддаленому сховищі Git.

Кожен pushзапропонує мені ввести usernameта password. Я хотів би уникати цього на кожному натисканні, але як налаштувати його уникнути?


6
Відповідь можна знайти тут: stackoverflow.com/questions/6565357 / ...
kbdjockey

3
Довга коротка історія: Щодо github, просто перейдіть до цих двох посилань help.github.com/articles/generating-ssh-keys help.github.com/articles/changing-a-remote-s-url
червня

для бітбукета перейдіть за цим посиланням
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.
selalerer

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 Мабуть тому, що це по своїй суті небезпечно. На сторінці сторінки git: "Використання цього помічника зберігатиме ваші паролі незашифровані на диску, захищеному лише дозволами файлової системи."
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.
sheldonkreger

1
Не впевнений, чому це не є частиною прийнятої відповіді. Дякую!
jwalk

1
Прийнята відповідь повинна складатися з фактично прийнятої відповіді ПЛЮС цього.
Пуче

3
Ви можете опустити "git + ssh: //" і просто скористатисяgit@github.com/username/reponame.git
Іван Шулєв,

1
@IvanShulev Я спробував спочатку без git + ssh і нічого не вийшло
Antonello

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працює, якщо ви не заперечуєте, щоб кожен раз натягували на пароль.
тайм

Для користувачів github git push --repo https://github.com/Username/repo це працює без .git розширення
Pe Dro,

24

Збереження нескінченно

Ви можете скористатись git-credential-store через

git config credential.helper store

який зберігає ваш пароль незашифрований у файловій системі :

Використання цього помічника зберігатиме ваші паролі незашифровані на диску, захищеному лише дозволами файлової системи. Якщо це неприйнятна компромісна безпека, спробуйте git-poverljiv-cache або знайдіть помічника, який інтегрується з захищеним сховищем, наданим вашою операційною системою.

З таймаутом

Використовуйте кеш-файл git, який за замовчуванням зберігає пароль протягом 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. Вам також потрібно буде зберігати облікові дані у брелоку за допомогою програми Keychain.
  • Якщо ви використовуєте Windows, ви можете встановити помічник під назвою "Git Credential Manager for Windows". Це аналогічно помічнику "osxkeychain", описаному вище, але він використовує Windows Credential Store для контролю конфіденційної інформації. Його можна знайти за адресою https://github.com/Microsoft/Git-Credential-Manager-for-Windows . [акцентує моє]

Для 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-агента за допомогою команди нижче

ssh-add ~/.ssh/id_rsa 

Крок 4 -

Тепер додайте віддалений URL-адресу git@github.com: user_name / repo_name.git до свого локального git repo за допомогою команди нижче.

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

5

Просто хотілося кілька разів вказати на рішення, сказане вище:

git config credential.helper store

Ви можете використовувати будь-яку команду, яка вимагає пароль після цього. Вам не потрібно тиснути. (Ви також можете тягнути, наприклад). Після цього вам більше не потрібно буде вводити своє ім’я користувача / пароль.


3

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


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- просто введіть для всіх підказок);
  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.


2

Моє рішення в Windows:

  1. Клацніть правою кнопкою миші на каталозі, щоб натиснути та вибрати "Git Bash Here".
  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 => Зберегти

2

Якщо ваш ПК захищений або ви не переймаєтесь безпекою пароля, цього можна досягти дуже просто. Припустимо, що віддалене сховище знаходиться в GitHub і originє вашою локальною назвою для віддаленого сховища, використовуйте цю команду

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

--pushПрапор забезпечує це змінює URL сховища для git pushєдиної команди. (Питання, задане в початковому дописі, стосується git pushлише команди. Потрібне ім'я користувача + пароль лише для операцій push - це нормальна настройка для публічних сховищ на GitHub. Зауважте, що приватні сховища в GitHub також вимагатимуть ім’я користувача + пароль для операцій "pull and fetch". , тому для приватного сховища ви не хочете використовувати --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>

Що робити, якщо пароль є @, це порушення команди командного мислення після @ як частини git-сервера?
Пранав Сінгх

Якщо ваш пароль містить "@", ви тут самостійно, вибачте. Ви можете змінити свій пароль?
radfast

Потрібно підняти запит на зміну пароля, оскільки я робив автоматизацію для постійної інтеграції, маючи обліковий запис сервісу (не особистий). Наразі використовуються SSH-ключі для безпечного входу
Pranav Singh

1

Все це виникає через те, що git не надає опції в командах clone / pull / push / fetch для надсилання облікових даних через трубу. Хоча він надає файл povermental.helper, він зберігається у файловій системі або створює демон тощо. Часто облікові дані GIT є типовими на рівні системи, і на них потрібно захищати програми, викликаючи команди git. Дійсно, дуже небезпечно.

Ось над чим мені довелося працювати. 1. Версія Git (git --версія) повинна бути більше або дорівнює 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 віддаленого походження. Введіть "git remote -v", щоб побачити шкоду. Виправте це, встановивши віддалену вихідну URL-адресу без пароля. "git віддалене походження set_url 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 як аргументи, а не той, який бере аргумент одного String.

GIT FETCH / PULL / PUSH

  1. встановіть пароль у віддаленій URL-адресі git таким чином: "git remote set_url походження http: // {myuser}: {mypwd} @ {my_repo_ip_address} / {myrepo_name.git}"
  2. Видайте команду git fetch / push / pull. Тоді вам не буде запропоновано ввести пароль.
  3. Виконайте чистку, як у попередньому розділі. Не сумуйте.

0

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


0

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

> ssh-keygen.exe
> ssh-copy-id [username]@[GIT_server]
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.