How do I provide a username and password when running "git clone [email protected]"?
I know how to provide a username and password to an HTTPS request like this:
git clone https://username:[email protected]
But I'd like to know how to provide a username and password to the remote like this:
git clone [email protected]
I've tried like this:
git clone username:[email protected]@remote.git git clone [email protected]:[email protected] git clone [email protected]@username:password
But they haven't worked.
Based on Michael Scharf's comment:
You can leave out the password so that it won't be logged in your Bash history file:
git clone https://[email protected]/username/repository.git
It will prompt you for your password.
Alternatively, you may use:
git clone https://username:[email protected]/username/repository.git
This way worked for me from a GitHub repository.
Read more… Read less…
An alternative scp-like syntax may also be used with the ssh protocol:
The part before the
@ is the username, and the authentication method (password, public key, etc.) is determined by ssh, not Git. Git has no way to pass a password to ssh, because ssh might not even use a password depending on the configuration of the remote server.
ssh-agent to avoid typing passwords all the time
If you don't want to type your ssh password all the time, the typical solution is to generate a public/private key pair, put the public key in your
~/.ssh/authorized_keys file on the remote server, and load your private key into
ssh-agent. Also see Configuring Git over SSH to login once, GitHub's help page on ssh key passphrases, gitolite's ssh documentation, and Heroku's ssh keys documentation.
Choosing between multiple accounts at GitHub (or Heroku or...)
If you have multiple accounts at a place like GitHub or Heroku, you'll have multiple ssh keys (at least one per account). To pick which account you want to log in as, you have to tell ssh which private key to use.
For example, suppose you had two GitHub accounts:
bar. Your ssh key for
~/.ssh/foo_github_id and your ssh key for
~/.ssh/bar_github_id. You want to access
[email protected]:foo/foo.git with your
foo account and
[email protected]:bar/bar.git with your
bar account. You would add the following to your
Host gh-foo Hostname github.com User git IdentityFile ~/.ssh/foo_github_id Host gh-bar Hostname github.com User git IdentityFile ~/.ssh/bar_github_id
You would then clone the two repositories as follows:
git clone gh-foo:foo/foo.git # logs in with account foo git clone gh-bar:bar/bar.git # logs in with account bar
Avoiding ssh altogether
Some services provide HTTP access as an alternative to ssh:
Heroku: See this support article.
WARNING: Adding your password to the clone URL will cause Git to store your plaintext password in
.git/config. To securely store your password when using HTTP, use a credential helper. For example:
git config --global credential.helper cache git config --global credential.https://github.com.username foo git clone https://github.com/foo/repository.git
The above will cause Git to ask for your password once every 15 minutes (by default). See
git help credentials for details.
In the comments of @Bassetassen's answer, @plosco mentioned that you can use
git clone https://<token>@github.com/username/repository.git to clone from GitHub at the very least. I thought I would expand on how to do that, in case anyone comes across this answer like I did while trying to automate some cloning.
GitHub has a very handy guide on how to do this, but it doesn't cover what to do if you want to include it all in one line for automation purposes. It warns that adding the token to the clone URL will store it in plaintext in
.git/config. This is obviously a security risk for almost every use case, but since I plan on deleting the repo and revoking the token when I'm done, I don't care.
1. Create a Token
GitHub has a whole guide here on how to get a token, but here's the TL;DR.
- Go to Settings > Developer Settings > Personal Access Tokens (here's a direct link)
- Click "Generate a New Token" and enter your password again. (here's another direct link)
- Set a description/name for it, check the "repo" permission and hit the "Generate token" button at the bottom of the page.
- Copy your new token before you leave the page
2. Clone the Repo
Same as the command @plosco gave,
git clone https://<token>@github.com/<username>/<repository>.git, just replace
<repository> with whatever your info is.
If you want to clone it to a specific folder, just insert the folder address at the end like so:
git clone https://<token>@github.com/<username>/<repository.git> <folder>, where
<folder> is, you guessed it, the folder to clone it to! You can of course use
~, etc. here like you can elsewhere.
3. Leave No Trace
Not all of this may be necessary, depending on how sensitive what you're doing is.
- You probably don't want to leave that token hanging around if you have no intentions of using it for some time, so go back to the tokens page and hit the delete button next to it.
- If you don't need the repo again, delete it
rm -rf <folder>.
- If do need the repo again, but don't need to automate it again, you can remove the remote by doing
git remote remove originor just remove the token by running
git remote set-url origin https://github.com/<username>/<repository.git>.
- Clear your bash history to make sure the token doesn't stay logged there. There are many ways to do this, see this question and this question. However, it may be easier to just prepend all the above commands with a space in order to prevent them being stored to begin with.
Note that I'm no pro, so the above may not be secure in the sense that no trace would be left for any sort of forensic work.
Though there are many answers, myself facing the repeated issue when username or password has special characters in it.
URL encode your username and password for git, then use it as part of URL itself (when there is no security concern).
Say, URL encoded value of username
'user+1' is user%2B1
and URL encoded value of password
'[email protected]' is Welcome%401234
Then your GIT Clone URL would look like,
git clone https://user%2B1:Welcome%[email protected]works perfectly, whereas,
git clone https://user+1:[email protected]@actual-git-url-for-the-repo gives you 403 errors
Hope this helps.
Just in case, want to URL encode online: https://www.urlencoder.org/
Follow this arguments to replace with ur special cases if they are creating an issue:
! # $ & ' ( ) * + , / : ; = ? @ [ ]
%21 %23 %24 %26 %27 %28 %29 %2A %2B %2C %2F %3A %3B %3D %3F %40 %5B %5D
So for example-
Solution URL to use: