Git on Bitbucket: Завжди просив пароль, навіть після завантаження мого відкритого ключа SSH


180

Я завантажив свій ~/.ssh/id_rsa.pubдля ключів SSH Bitbucket в якості пояснив , але Git все ще запитує мене мій пароль при кожній операції (наприклад , як git pull). Я щось пропустив?

Це приватне сховище (вилка приватного сховища іншої людини), і я його клонував так:

git clone git@bitbucket.org:Nicolas_Raoul/therepo.git

Ось мій місцевий .git/config:

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = https://Nicolas_Raoul@bitbucket.org/Nicolas_Raoul/therepo.git
[branch "master"]
        remote = origin
        merge = refs/heads/master

У тому ж середовищі з тим самим відкритим ключем Git on Github працює чудово.
.sshє rwx------, .ssh/id_rsaє -rw-------, .ssh/id_rsa.pubє-rw-r--r--

Відповіді:


265

Ви впевнені, що клонували його за допомогою URL-адреси ssh?

URL-адреса для джерела говорить, що url = https://Nicolas_Raoul@bitbucket.org/Nicolas_Raoul/therepo.gitякщо він використовує https, він запитає пароль незалежно від ваших ключів ssh.

Отже, ви хочете зробити наступне:

відкрийте свій конфігураційний файл у вашому поточному репо ..

vim .git/config

і змінити рядок із URL-адресою

[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = https://Nicolas_Raoul@bitbucket.org/Nicolas_Raoul/therepo.git

до

[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = git@bitbucket.org:Nicolas_Raoul/therepo.git

62
Ви маєте рацію, дякую! Я, швидше за все, клонував із неправильною URL-адресою. Я замінив URL в .git/configс git@bitbucket.org:Nicolas_Raoul/therepo.gitі тепер він працює!
Ніколя Рауль

8
і змінити пульт за допомогою git stackoverflow.com/questions/2432764/…
Alex Nolasco

3
Саме bitbucket запропонував мені https URL при створенні сховища! Як так!
Денис Княжев

4
Майте на увазі, якщо ваш bitbucket приватний, якщо ви хочете використовувати протокол git, вам потрібно додати ваш ssh ключ на веб-сайт BitBuket у своїх налаштуваннях.
cevaris

7
Довелося змінити URL на ssh://git@bitbucket.org/userName/repoName.git- без ssh://префікса він не працював.
trygub

34

Як пояснено тут , якщо ви клонуєте за URL-адресою SSH , вам не потрібно вводити ім’я користувача / пароль кожен раз, коли ви натискаєте / витягуєте. Перевірити вище відповідь від @manojlds

Але якщо ви хочете клонувати HTTPS і хочете уникати введення імені користувача / пароля кожен раз, ви можете зберігати облікові дані в кеш-пам'яті з командою нижче:

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

де 3600 (секунд) означає 1 годину, ви можете змінити це відповідно до вашої потреби.


@atilkan У цьому випадку ви можете надати інформацію про свою машину / ОС та версію git? І повідомлення про помилку, якщо воно є, коли ви намагаєтеся встановити кеш-налаштування.
Ajeet Shah

Я клонував чиєсь сховище в біт-коді, і ось мої пульти. manecs-MBP:LocationTracker manec$ git remote -v origin https://Vysh1@bitbucket.org/Vysh1/locationtracker.git (fetch) origin https://Vysh1@bitbucket.org/Vysh1/locationtracker.git (push)
Banee Ishaque K

@AjeetShah, що робити, якщо я ввів неправильний пароль? це також кеширує неправильний пароль?
anaval

@anaval Чому б ви не спробували це, а після цього спробуйте ввести правильний пароль після очищення чи відключення кешу? Відредагуйте відповідь і повідомте нам, як ви це зробили :)
Аджет Шах

19

Її вже відповіли вище. Я підсумую кроки, щоб перевірити вище.

запустити git remote -vв проект реж. Якщо на виході відображається віддалений URL, починаючи з https://abcцього, вам може знадобитися кожен раз пароль пароля.

Отже, щоб змінити віддалений запуск URL-адреси git remote set-url origin {ssh remote url address starts with mostly git@bitbucket.org:}.

Тепер запустіть, git remote -v щоб перевірити змінену віддалену URL-адресу.

Посилання: https://help.github.com/articles/changing-a-remote-s-url/


16

Привіт, Googlers з майбутнього.

На MacOS> = High Sierra, ключ SSH більше не зберігається в KeyChain через причини .

Використання ssh-add -Kбільше не переживає перезавантаження також.

Ось 3 можливі рішення .

Я успішно застосував перший метод. Я створив файл з ім'ям configв ~/.ssh:

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_rsa

2
Цьому потрібно більше уваги! Я витратив віки на пошуки рішення, і перший з configфайлом у /.sshроботі ідеально!
Кітсон

1
Ці відповіді вирішили мою проблему на MacO: cd ~/.ssh+ ls+ nano config(файл уже створений) + додати код у відповідь Вайдена. Потім керуйте X + Y, щоб зберегти файл.
Sébastien Gicquel

9

У випадку запиту HTTP також можна або альтернативно вставити облікові дані (з паролем) безпосередньо в URL-адресу:

http://username:password@bitbucket.org/...

Це допоможе врятувати біль, щоб кожен раз знову давати свої повноваження. Просто змініть ваш .git / config (URL).


10
Але не безпечно. І не працювати, якщо в паролі є якийсь лист на кшталт$%
Gank

3
Кожен, хто читає цей коментар, будь ласка, пам’ятайте: те, що він працює , не означає, що це правильно . Якщо ви постійно копіюєте свій пароль куди завгодно, то ви робите це неправильно. Те саме з тими, хто завжди встановлює дозволи на папки 777: зупиняйте, думайте, досліджуйте, розумійте, а потім робите це належним чином.
dKen

9

Жодна з цих відповідей мені не допомогла, виявилося, моє питання було дещо іншим. Саме SSH щоразу запитував мій пароль, перш ніж надсилати ключ. Отже, що я повинен був зробити, це пов’язати свій пароль з цією командою:

ssh-add -K ~/.ssh/id_rsa

Потім він запропонує вам пароль і збереже його. Це може бути рішення, яке ви шукаєте, якщо кожен раз, коли вам буде запропоновано пароль, він пише

Введіть пароль для ключа '/Users//.ssh/id_rsa':

Більше інформації тут

ПРИМІТКА. Я використовував це на своїй машині Mac успішно, але як @Rob Kwasowski вказав нижче, Kваріант верхнього регістру є унікальним для mac. Якщо не на mac, вам потрібно буде використовувати малі регістри k(які, ймовірно, працюють і для mac, але я не перевіряв).


1
Це чудово, але воно повинно бути kssh-add -k ~/.ssh/id_rsa
малим

ви можете, будь ласка, детальніше розглянути?
stackPusher

Як пояснено тут: ssh.com/ssh/add , параметр командного рядка - малі k, а не великі, оскільки ці параметри залежать від регістру.
Роб Квасовський

праворуч, але велика опція K також додасть ключ до брелка, в той час як нижній регістр k додасть ключ до агента. тому я запитую: "чому б ти не хотів, щоб ключ також був доданий до вашого брелка?"
stackPusher

1
Зверніть увагу на відмінності платформи, -Kхарактерні лише для Mac: help.github.com/en/articles/error-ssh-add-illegal-option----k
Роб Квасовський

5

Я думаю, що Step 1це є Windowsі Step 2є, Linuxале ви забули це згадати про це належним чином.
Ajeet Shah

Я провів ці 3 кроки на своєму вікні Windows, і це спрацювало.
webdev5

2
У цьому випадку я хотів би додати, що для ОС Linux нам потрібен лише step2 та step3 для того ж ефекту :)
Ajeet Shah

4

Далі передбачається доступ командного рядка через iTerm / Terminal до бітбукета.

Для MacOS Sierra 10.12.5 моя система виявила еквівалентну проблему - запитуючи мою SSH-фразу для кожного підключення до бітбукета.

Проблема стосується оновлень OpenSSH у macOS 10.12.2, які описані тут у Технічній примітці TN2449 .

Ви дуже добре можете налаштувати своє рішення, але наступне буде працювати при додаванні до вашого файлу ~ / .ssh / config:

Host *
    UseKeychain yes

Для отримання додаткової інформації про ssh-конфігурації, ознайомтеся з довідковими сторінками для ssh_config:

% man ssh_config

Ще одна річ: є хороша рецензія на суперкористувача тут , що обговорює цю проблему і різні рішення в залежності від ваших потреб і настройки.


2

Я клонував сховище URL-адресою HTTPS замість SSH-URL, отже навіть після додавання ключа SSH він запитував мене про пароль на Bash Shell.

Я щойно відредагував ./.git/configфайл і змінив значення urlзмінної, просто замінивши https://наssh://

Напр

[core]
        ...
        ...
        ...
[remote "origin"]
        url = https://<username>@bitbucket.org/<username>/<repository_name>.git
        fetch = +refs/heads/*:refs/remotes/origin/*
        ...
        ...
        ...

Змінено на:

[core]
        ...
        ...
        ...
[remote "origin"]
        url = ssh://<username>@bitbucket.org/<username>/<repository_name>.git
        fetch = +refs/heads/*:refs/remotes/origin/*
        ...
        ...
        ...

1

Можливо, вам потрібно буде ще раз перевірити файл SSH. Ви можете орієнтуватися на BitBucket для перегляду іншого / неправильного приватного ключа на еквівалентний відкритий ключ, який ви зберегли на BitBucket.

Перевірте це tail ~/.ssh/config- ви побачите щось подібне до:

Host bitbucket.org
 HostName bitbucket.org
 IdentityFile ~/.ssh/personal-bitbucket-ssh-key

Пам’ятайте, що додавання додаткових ідентифікацій (таких як робота та дім) можна виконати за допомогою ssh-addкоманди, наприклад:

ssh-keygen -t rsa -C "companyName" -f "companyName"
ssh-add ~/.ssh/companyName

Після того, як ви підтвердите, який приватний ключ розглядається локально, у цьому випадку ви можете взяти свій загальнодоступний еквівалент:

cat ~/.ssh/personal-bitbucket-ssh-key.pub | pbcopy

І вставити цей шифр на BitBucket. Ваші поштовхи git тепер (за умови, що ви використовуєте клон SSH, як зазначено вище, відповіді) будуть дозволені без пароля, оскільки ваш пристрій визнаний дружнім.

Сподіваємось, це допомагає зрозуміти це комусь.


0

Зі мною, хоча я запускав 'git clone ssh: //git@stash.xxx.com: 7999 / projName / projA.git', мені все ще пропонували пароль для цього нового репо, що я клонував, так, порівнюючи його .git / config файл для інших репост, які працюють, виявився URL-адресою в розділі [віддалене "походження"], він був встановлений на ssh шлях вище для нового репо, але був встановлений в https: xxx для робочого .


0

У мене були інші дивацтва щодо входу в систему. Я натрапив на щось, що здавалося абсолютно німим, але працювало в моєму випадку. Просто перейдіть до брелока MacOS. Знайдіть значок блокування входу на бічній панелі. Клацніть його, щоб вийти, а потім натисніть, щоб увійти. Звучить тупо, але це вирішило мої проблеми. Варто пострілу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.