These days when I create a new repository on GitHub on the setup page I get:
git remote add origin https://github.com/nikhilbhardwaj/abc.git
git push -u origin master
And whenever I have to push a commit I need to enter my GitHub username and password.
I can manually change that to
git@github.com:nikhilbhardwaj/abc.git
in the .git/config
. I find this quite irritating - is there some way I can configure git to use SSH by default?
Set up a repository's origin branch to be SSH
The GitHub repository setup page is just a suggested list of commands (and GitHub now suggests using the HTTPS protocol). Unless you have administrative access to GitHub's site, I don't know of any way to change their suggested commands.
If you'd rather use the SSH protocol, simply add a remote branch like so (i.e. use this command in place of GitHub's suggested command). To modify an existing branch, see the next section.
$ git remote add origin git@github.com:nikhilbhardwaj/abc.git
Modify a pre-existing repository
As you already know, to switch a pre-existing repository to use SSH instead of HTTPS, you can change the remote url within your .git/config
file.
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
-url = https://github.com/nikhilbhardwaj/abc.git
+url = git@github.com:nikhilbhardwaj/abc.git
A shortcut is to use the set-url
command:
$ git remote set-url origin git@github.com:nikhilbhardwaj/abc.git
More information about the SSH-HTTPS switch
- "Why is Git always asking for my password?" - GitHub help page.
- GitHub's switch to Smart HTTP - relevant StackOverflow question
- Credential Caching for Wrist-Friendly Git Usage - GitHub blog post about HTTPS, and how to avoid re-entering your password
That tells git to always use SSH instead of HTTPS when connecting to GitHub/BitBucket, so you'll authenticate by certificate by default, instead of being prompted for a password.
The response provided by Trevor is correct.
But here is what you can directly add in your .gitconfig
:
# Enforce SSH
[url "ssh://git@github.com/"]
insteadOf = https://github.com/
[url "ssh://git@gitlab.com/"]
insteadOf = https://gitlab.com/
[url "ssh://git@bitbucket.org/"]
insteadOf = https://bitbucket.org/
If you want many keys for different hosts, do this:
Create a script
#!/usr/bin/env bash
email="$1"
hostname="$2"
hostalias="$hostname"
keypath="$HOME/.ssh/${hostname}_rsa"
ssh-keygen -t rsa -C $email -f $keypath
if [ $? -eq 0 ]; then
cat >> ~/.ssh/config <<EOF
Host $hostalias
Hostname $hostname
User git
IdentitiesOnly yes
IdentityFile $keypath
EOF
fi
and run it like
sh script.sh myemail@example.com github.com
Change your remote url
git remote set-url origin git@github.com:user/foo.git
Add content of ~/.ssh/github.com_rsa.pub to your ssh keys on github.com
Check connection
ssh -T git@github.com
You may have accidentally cloned the repository in https instead of ssh.
I've made this mistake numerous times on github.
Make sure that you copy the ssh link in the first place when cloning, instead of the https link.