252

I uploaded my ~/.ssh/id_rsa.pub to Bitbucket's SSH keys as explained, but Git still asks me for my password at every operation (such as git pull). Did I miss something?

It is a private repository (fork of another person's private repository) and I cloned it like this:

git clone [email protected]:Nicolas_Raoul/therepo.git

Here is my local .git/config:

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

In the same environment with the same public key, Git on Github works fine.
.ssh is rwx------, .ssh/id_rsa is -rw-------, .ssh/id_rsa.pub is -rw-r--r--

3

17 Answers 17

368

Are you sure you cloned it using the ssh url?

The url for origin says url = https://[email protected]/Nicolas_Raoul/therepo.git so if it is using https it will ask for password irrespective of your ssh keys.

So what you want to do is the following:

open your config file in your current repo ..

vim .git/config

and change the line with the url from

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

to

[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = [email protected]:Nicolas_Raoul/therepo.git
12
  • 68
    You are right, thanks! I had most probably clone with the wrong URL. I replaced the URL in .git/config with [email protected]:Nicolas_Raoul/therepo.git and now it works! Commented Dec 22, 2011 at 7:55
  • 8
    and to change the remote using git stackoverflow.com/questions/2432764/… Commented Sep 12, 2012 at 3:41
  • 4
    It was bitbucket who suggested me https url when creating a repository! How come! Commented Aug 25, 2013 at 16:03
  • 4
    Keep in mind if your bitbucket is private, if you want to use the git protocol, you need to add you ssh key to BitBuket's website in your settings.
    – cevaris
    Commented Jan 23, 2014 at 18:37
  • 9
    Had to change the URL to ssh://[email protected]/userName/repoName.git — without ssh:// prefix it didn't work.
    – trygub
    Commented Feb 22, 2017 at 20:13
50

As explained here, if you clone with SSH url, you don't need to enter username / password each time you push / pull. Check above answer by @manojlds

But if you want to clone with HTTPS and want to avoid entering username / password each time, you can store credentials into cache with below command:

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

where 3600 (seconds) means 1 hour, you may change it as per your requirement.

4
  • @atilkan In that case, can you provide your machine / OS and git version info? And the error message if any when you try to set the cache setting.
    – Ajeet Shah
    Commented Mar 20, 2018 at 6:55
  • I cloned someone's repository form bitbucket, and here is my remotes. manecs-MBP:LocationTracker manec$ git remote -v origin https://[email protected]/Vysh1/locationtracker.git (fetch) origin https://[email protected]/Vysh1/locationtracker.git (push) Commented Jun 21, 2018 at 7:31
  • @AjeetShah what if I entered the wrong password? would it also cache the wrong password?
    – anaval
    Commented Dec 4, 2018 at 3:46
  • @anaval Why don't you try that and after that try entering correct password after clearing or disabling the cache? Edit the answer and let us know how you did that :)
    – Ajeet Shah
    Commented Dec 5, 2018 at 14:34
34

Its already answered above. I will summarise the steps to check above.

run git remote -v in project dir. If the output shows remote url starting with https://abc then you may need username password everytime.

So to change the remote url run git remote set-url origin {ssh remote url address starts with mostly [email protected]:}.

Now run git remote -v to verify the changed remote url.

Refer : https://help.github.com/articles/changing-a-remote-s-url/

0
21

Hello Googlers from the future.

On MacOS >= High Sierra, the SSH key is no longer saved to the KeyChain because of reasons.

Using ssh-add -K no longer survives restarts as well.

Here are 3 possible solutions.

I've used the first method successfully. I've created a file called config in ~/.ssh:

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_rsa
2
  • 2
    This needs more attention! I spent ages looking for a solution and the first one with the config file in /.ssh works perfect!
    – Kitson
    Commented Oct 24, 2019 at 8:38
  • 1
    This answers solved my problem on MacOs : cd ~/.ssh + ls + nano config (the file was already created) + add code in Vaiden's answer. Then control X + Y to save file. Commented Mar 24, 2020 at 18:48
18

If you are using a Ubuntu system, use the following to Store Password Permanently:

git config --global credential.helper store
3
  • 1
    Thanks man, It solves my problem.
    – Chi
    Commented Nov 26, 2021 at 12:02
  • 1
    This command doesn't do anything on my wsl
    – Ram Venkat
    Commented Jul 13, 2023 at 6:51
  • This command is for Ubuntu OS. This command doesn't do anything when we execute it. We need to provide the git password when we clone or push any branch, after that it won't ask you again. This means after executing this command, it asks password for the first time only.
    – Vinodh Ram
    Commented Jul 27, 2023 at 12:13
15

None of these answers helped me, turned out my issue was slightly different. It was ssh that was asking for my password each time, before sending the key. So what I had to do was link my password with this command:

ssh-add -K ~/.ssh/id_rsa

It'll then prompt you for your password and store it. This could be the solution you're looking for if each time your prompted for a password it says

Enter passphrase for key '/Users//.ssh/id_rsa':

More info here

NOTE: I used this on my mac machine successfully, but as @Rob Kwasowski pointed out below, the upper case K option is unique to mac. If not on mac you will need to use lowercase k (which probably works for mac too but I haven't tested).

7
  • 1
    That's great, but it should be lowercase k: ssh-add -k ~/.ssh/id_rsa Commented Apr 5, 2019 at 6:27
  • could you elaborate please? Commented Apr 5, 2019 at 16:16
  • As explained here: ssh.com/ssh/add , the command line option is lowercase k, not uppercase as those options are case sensitive. Commented Apr 5, 2019 at 16:28
  • 1
    right but the uppercase K option will add the key to the keychain as well, while lowercase k will only add the key to the agent. so what i'm asking is 'why wouldnt you want the key to also be added to your keychain?' Commented Apr 5, 2019 at 16:51
  • 1
    Please be aware of platform differences, -K is specific to Mac: help.github.com/en/articles/error-ssh-add-illegal-option----k Commented Apr 5, 2019 at 16:56
13

In the HTTP request case, it is also and alternatively possible to paste the credentials (with password) directly into the url:

http://username:[email protected]/...

This will save the pain to give your credentials every times again. Simple modify your .git/config (the url).

2
  • 10
    But not safe. And not work if the password has some letter like $%
    – Gank
    Commented May 13, 2016 at 15:45
  • 6
    Anyone who reads this comment, please remember: just because it works, doesn't mean it's right. If you're copying your password anywhere permanently, then you're doing it wrong. Same with those who always set folder permissions to 777: stop, think, research, understand, and then do it properly.
    – dKen
    Commented Mar 21, 2018 at 13:28
5
3
  • I think that Step 1 is for Windows and Step 2 is for Linux but you forgot it mention it properly.
    – Ajeet Shah
    Commented Aug 9, 2016 at 18:15
  • I ran those 3 steps on my Windows box and it worked.
    – webdev5
    Commented Aug 9, 2016 at 19:30
  • 2
    In that case, I would like to add that on Linux OS, we need only step2 and step3 for the same effect :)
    – Ajeet Shah
    Commented Aug 10, 2016 at 0:08
4

The following assumes command-line access via iTerm / Terminal to bitbucket.

For MacOS Sierra 10.12.5, my system manifested an equivalent problem - asking for my SSH passphrase on each connection to bitbucket.

The issue has to do with OpenSSH updates in macOS 10.12.2, which are described here in Technical Note TN2449.

You very well might want to tailor your solution, but the following will work when added to your ~/.ssh/config file:

Host *
    UseKeychain yes

For more information on ssh configs, take a look at the man pages for ssh_config:

% man ssh_config

One other thing: there is a good write-up on superuser here that discusses this problem and various solutions depending on your needs and setup.

0
4

I cloned the repository with HTTPS URL instead of SSH URL hence even after adding the SSH Key it was asking me for password on Bash Shell.

I just edited the ./.git/config file and changed the value of url variable by simply replacing the https:// to ssh://

E.g.

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

Changed to:

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

The keyword here is 'ssh://' instead of https://' :-)

in your .git/config

Be aware! If you have cloned repositories, these can be re-cloned after you added your public key to BitBucket to make it work. This is probably more clean that hacking your config file ;-)

2

You may need to double-check your SSH identities file. You may be guiding BitBucket to look at a different/incorrect private key to the equivalent public key that you have saved on BitBucket.

Check it with tail ~/.ssh/config - you will see something similar to:

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

Remember, that adding additional identities (such as work and home) can be done with the ssh-add command, for example:

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

Once you have confirmed which private key is being looked at locally, you can then take your public equivalent, in this case:

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

And paste that cipher onto BitBucket. Your git pushes will now (provided you are using the SSH clone as aforementioned answers have pointed out) be allowed without a password, as your device is a recognised friendly.

Hopefully this helps clear it up for someone.

2

Actually, none of these answers reflect current state of the art with Git (v2.29 by time of writing this answer). In the latest versions of Git, cache, winstore, wincred are deprecated.


If you want to clone a Bitbucket repository via HTTPS, e.g.

git clone https://[email protected]/SomeOrganization/SomeRepo.git

You have to:

  1. Generate app password at Bitbucket user administration.
  2. Setup your credential method in .gitconfig accordingly (global or local)
[credential]
    helper = manager

You can locate your .gitconfig by executing this command.

git config --list --show-origin
  1. Execute
git clone https://[email protected]/SomeOrganization/SomeRepo.git

and wait until log on window appears. Use your user name from the url (kutlime in my case) and your generated app password as a password.

2

If you still get too many authentication failures errors:

nano ~/.ssh/config

And paste:

Host bitbucket_james
    HostName bitbucket.org
    User james
    Port 22
    IdentitiesOnly=yes
    IdentityFile=~/.ssh/id_rsa_bitbucket_james

And most important - you should bitbucket_james alias instead of bitbucket.org when you set up your remote URL:

git remote set-url origin git@bitbucket_james:repo_owner_user/repo_name.git
0

With me, although I ran 'git clone ssh://[email protected]:7999/projName/projA.git' I was still being prompted for password for this new repo that I cloned, so by comparing its .git/config file to other repos that work, It turned out to be the url under the [remote "origin"] section, it was set to the ssh path above for the new repo, but was set to https:xxx for the working one.

0

I was having other weirdness around logging in. I came across something that seemed totally dumb but worked in my case. Simply go to MacOS's keychain. Find the login lock icon in the sidebar. Click it to logout and then click to login. Sounds dumb but it solved my issues. Worth a shot.

0

I logged in using my username instead of email and it started working.

Not the answer you're looking for? Browse other questions tagged or ask your own question.