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

180

Я загрузил свои ключи SSH~/.ssh/id_rsa.pub в 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 на 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
manojlds
источник
62
Вы правы, спасибо! Скорее всего, у меня был клон с неправильным URL. Я заменил URL в .git/configс git@bitbucket.org:Nicolas_Raoul/therepo.gitи теперь это работает!
Николас Рауль
8
и сменить пульт, используя git stackoverflow.com/questions/2432764/…
Алекс Ноласко
3
Это был bitbucket, который предложил мне https URL при создании репозитория! Как придешь!
Денис Княжев
4
Имейте в виду, что если ваш bitbucket является приватным, если вы хотите использовать протокол git, вам нужно добавить ключ ssh на сайт BitBuket в ваших настройках.
Цеварис
7
Пришлось сменить URL на ssh://git@bitbucket.org/userName/repoName.git- без ssh://префикса это не сработало.
Trygub
34

Как объясняется здесь , если вы клонируете с помощью SSH url, вам не нужно вводить имя пользователя / пароль каждый раз, когда вы нажимаете / извлекаете. Проверьте ответ выше @manojlds

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

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

где 3600 (секунд) означает 1 час, вы можете изменить его согласно вашему требованию.

Аджит Шах
источник
@atilkan В таком случае, можете ли вы предоставить информацию о вашей машине / ОС и git-версии? И сообщение об ошибке, если таковые имеются, при попытке установить настройки кэша.
Аджит Шах
Я клонировал чью-то форму хранилища bitbucket, и вот мои пульты. 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 Почему бы вам не попробовать это и после этого попытаться ввести правильный пароль после очистки или отключения кэша? Отредактируйте ответ и дайте нам знать, как вы это сделали :)
Аджит Шах
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

Привет гуглеры из будущего.

В MacOS> = High Sierra ключ SSH больше не сохраняется в KeyChain по причинам .

Использование ssh-add -Kбольше не выживает, перезапускает также.

Вот 3 возможных решения .

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

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_rsa
Vaiden
источник
2
Это требует большего внимания! Я потратил целую вечность на поиски решения, и первый с configфайлом в /.sshидеальном состоянии!
Китсон
1
Эти ответы решили мою проблему на MacOs: cd ~/.ssh+ ls+ nano config(файл уже был создан) + добавить код в ответ Вайдена. Затем управляйте X + Y, чтобы сохранить файл.
Себастьян Гикель
9

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

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

Это избавит от боли, чтобы каждый раз выдавать свои учетные данные. Просто измените ваш .git / config (URL).

Свен В.
источник
10
Но не безопасно. И не работает, если в пароле есть какая-то буква вроде$%
Ганк
3
Любой, кто читает этот комментарий, пожалуйста, помните: просто потому, что он работает , не значит, что это правильно . Если вы постоянно копируете свой пароль, значит, вы делаете это неправильно. То же самое с теми, кто всегда устанавливает права доступа к папке 777: останавливаться, думать, исследовать, понимать, а затем делать это правильно
dKen
9

Ни один из этих ответов не помог мне, оказалось, что моя проблема немного отличалась. Это был ssh, который спрашивал мой пароль каждый раз перед отправкой ключа. Так что я должен был связать свой пароль с этой командой:

ssh-add -K ~/.ssh/id_rsa

Затем вам будет предложено ввести пароль и сохранить его. Это может быть решением, которое вы ищете, если каждый раз, когда вы запрашиваете пароль, он говорит

Введите ключевую фразу для ключа '/Users//.ssh/id_rsa':

Больше информации здесь

ПРИМЕЧАНИЕ. Я успешно использовал это на своем компьютере Mac, но, как указал @Rob Kwasowski ниже, Kопция верхнего регистра уникальна для Mac. Если не на Mac, вам нужно использовать строчные буквы k(что, вероятно, работает и для Mac, но я не проверял).

stackPusher
источник
1
Это здорово, но это должно быть в нижнем регистре k:ssh-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
webdev5
источник
Я думаю, что Step 1это для Windowsи Step 2для, Linuxно вы забыли это упомянуть об этом должным образом.
Аджит Шах
Я выполнил эти 3 шага на своем компьютере с Windows, и это сработало.
webdev5
2
В этом случае я хотел бы добавить, что в ОС Linux нам нужны только step2 и step3 для одинакового эффекта :)
Ajeet Shah
4

Следующее предполагает доступ из командной строки через iTerm / Terminal к bitbucket.

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

Проблема связана с обновлениями OpenSSH в macOS 10.12.2, которые описаны здесь в Технической ноте TN2449 .

Возможно, вы захотите адаптировать свое решение, но при добавлении в файл ~ / .ssh / config будет работать следующее:

Host *
    UseKeychain yes

Для получения дополнительной информации о ssh-конфигах, посмотрите справочные страницы для ssh_config:

% man ssh_config

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

П.Я.
источник
2

Я клонировал хранилище с HTTPS-URL вместо 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/*
        ...
        ...
        ...
Swaroop Bhagwat
источник
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 pushes (при условии, что вы используете клон SSH, как указано в вышеупомянутых ответах) будут разрешены без пароля, поскольку ваше устройство признано дружественным.

Надеюсь, это поможет кому-то прояснить ситуацию.

Грант
источник
0

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

Нинос
источник
0

У меня были другие странности при входе в систему. Я столкнулся с чем-то, что казалось совершенно глупым, но сработало в моем случае. Просто перейдите на связку ключей MacOS. Найдите значок блокировки входа в систему на боковой панели. Нажмите, чтобы выйти, а затем нажмите, чтобы войти. Звучит глупо, но это решило мои проблемы. Стоит выстрел.

smileBot
источник