GitHub/GitLab SSH key based authentication: Difference between revisions

From WikiMLT
m (Стадий: 3 [Фаза:Разработване, Статус:Разутвърден]; Категория:DevOps and SRE)
mNo edit summary
Line 7: Line 7:
sudo apt update && sudo apt install -y openssh-client git
sudo apt update && sudo apt install -y openssh-client git
</syntaxhighlight>'''2.''' Create user's SSH directory and a sub directory where your dedicated GitHub SSH key will be stored:<syntaxhighlight lang="shell" line="1">
</syntaxhighlight>'''2.''' Create user's SSH directory and a sub directory where your dedicated GitHub SSH key will be stored:<syntaxhighlight lang="shell" line="1">
mkdir -p ~/.ssh/github
mkdir -p -m 700 ~/.ssh/github
chmod 700 ~/.ssh ~/.ssh/github
</syntaxhighlight>'''3.''' Generate the SSH key (the output key will have octal permissions <code>600</code>):<syntaxhighlight lang="shell" line="1">
ssh-keygen -t rsa -b 4096 -C 'your@email.com' -f ~/.ssh/github/id_rsa -q -N ''
</syntaxhighlight>
</syntaxhighlight>
* <code>-q</code> - silence ssh-keygen; <code>-N <nowiki>''</nowiki></code> - empty (without) passphrase, you can assign one if you want.


'''4.''' Copy the content of the file <code>id_rsa.pub</code>, use the following command to output it:<syntaxhighlight lang="shell" line="1">
* The option <code>-m 700</code> is equivalent to <code>chmod 700 ~/.ssh ~/.ssh/github</code>.
cat ~/.ssh/github/id_rsa.pub
 
'''3.''' Generate the SSH key (the output key will have octal permissions <code>600</code>):<syntaxhighlight lang="shell" line="1">
ssh-keygen -t ed25519 -C 'your@email.com' -f ~/.ssh/github/id_ed25519 -q -N ''
</syntaxhighlight>
* <code>-q</code> - silence ssh-keygen; <code>-N <nowiki>''</nowiki></code> - empty (without) passphrase, you can assign one if you want. If it is passphrase protected key, you can add <code>-a 256</code> (default is 16) to increase the security of the passphrase by decreasing its verification.
 
'''4.''' Copy the content of the file <code>id_ed25519.pub</code>, use the following command to output it:<syntaxhighlight lang="shell" line="1">
cat ~/.ssh/github/id_ed25519.pub
</syntaxhighlight>
</syntaxhighlight>
{{media|img=Git-key-authentication-settings.png|1|sz=460}}
{{media|img=Git-key-authentication-settings.png|1|sz=460}}
Line 23: Line 26:
* Then from the menu at the left side select ''SSH and GPG keys''.
* Then from the menu at the left side select ''SSH and GPG keys''.
* Click on the ''New SSH Key'' button.
* Click on the ''New SSH Key'' button.
* Type some meaningful for a ''Title'' and paste the content of <code>~/.ssh/github/'''id_rsa.pub'''</code> in the field ''Key''.
* Type some meaningful for a ''Title'' and paste the content of <code>~/.ssh/github/'''id_ed25519.pub'''</code> in the field ''Key''.
* Then click on the ''Add SSH Key'' button.
* Then click on the ''Add SSH Key'' button.


Line 31: Line 34:
</syntaxhighlight>Edit the <code>config</code> file and add the following entry for the new SSH key:<syntaxhighlight lang="bash">
</syntaxhighlight>Edit the <code>config</code> file and add the following entry for the new SSH key:<syntaxhighlight lang="bash">
Host github.com  
Host github.com  
     IdentityFile ~/.ssh/github/id_rsa
     IdentityFile ~/.ssh/github/id_ed25519
</syntaxhighlight>'''7.''' Test the setup. Use the following command:<syntaxhighlight lang="shell" line="1">
</syntaxhighlight>'''7.''' Test the setup. Use the following command:<syntaxhighlight lang="shell" line="1">
ssh -T git@github.com
ssh -T git@github.com
Line 59: Line 62:


*[https://gist.github.com/developius/c81f021eb5c5916013dc GitHub Developius' Gist: Setup SSH keys for use with GitHub/GitLab/BitBucket etc]
*[https://gist.github.com/developius/c81f021eb5c5916013dc GitHub Developius' Gist: Setup SSH keys for use with GitHub/GitLab/BitBucket etc]
*Information Security: [https://security.stackexchange.com/questions/90077/ssh-key-ed25519-vs-rsa SSH Key: Ed25519 vs RSA]
* Information Security: [https://security.stackexchange.com/questions/101044/is-it-bad-that-my-ed25519-key-is-so-short-compared-to-a-rsa-key Is it bad that my ed25519 key is so short compared to a RSA key?]
* Risan Bagja: [https://medium.com/risan/upgrade-your-ssh-key-to-ed25519-c6e8d60d3c54 Upgrade Your SSH Key to Ed25519]
* Cryptsus Blog: [https://cryptsus.com/blog/how-to-secure-your-ssh-server-with-public-key-elliptic-curve-ed25519-crypto.html How to secure your SSH server with public key Ed25519 Elliptic Curve Cryptography]
<noinclude>
<noinclude>
<div id='devStage'>
<div id='devStage'>

Revision as of 18:09, 5 September 2022

This ar­ti­cle is based on the an­swer of mine un­der the ques­tion How do I set­up SSH key based au­then­ti­ca­tion for GitHub? at Ask Ubun­tu. Here is short man­u­al how to set­up SSH key based au­then­ti­ca­tion for GitHub and how to use it.

Set­up SSH key based au­then­ti­ca­tion for GitHub

1. In­stall the openssh-client if it is not al­ready in­stalled, and of course git:

sudo apt update && sudo apt install -y openssh-client git

2. Cre­ate user's SSH di­rec­to­ry and a sub di­rec­to­ry where your ded­i­cat­ed GitHub SSH key will be stored:

mkdir -p -m 700 ~/.ssh/github
  • The op­tion -m 700 is equiv­a­lent to chmod 700 ~/.ssh ~/.ssh/github.

3. Gen­er­ate the SSH key (the out­put key will have oc­tal per­mis­sions 600):

ssh-keygen -t ed25519 -C 'your@email.com' -f ~/.ssh/github/id_ed25519 -q -N ''
  • -q – si­lence ssh-key­gen; -N '' – emp­ty (with­out) passphrase, you can as­sign one if you want. If it is passphrase pro­tect­ed key, you can add -a 256 (de­fault is 16) to in­crease the se­cu­ri­ty of the passphrase by de­creas­ing its ver­i­fi­ca­tion.

4. Copy the con­tent of the file id_ed25519.pub, use the fol­low­ing com­mand to out­put it:

cat ~/.ssh/github/id_ed25519.pub
Figure 1. Set­up SSH key with­in GitHub.

5. Go to your GitHub ac­count and fol­low these steps:

  • From the drop-down menu in up­per right cor­ner se­lect Set­tings.
  • Then from the menu at the left side se­lect SSH and GPG keys.
  • Click on the New SSH Key but­ton.
  • Type some mean­ing­ful for a Ti­tle and paste the con­tent of ~/.ssh/github/id_ed25519.pub in the field Key.
  • Then click on the Add SSH Key but­ton.

6. Cre­ate the ~/.ssh/con­fig file, if it doesn't al­ready ex­ist:

touch ~/.ssh/config 
chmod 600 ~/.ssh/config

Ed­it the con­fig file and add the fol­low­ing en­try for the new SSH key:

Host github.com 
    IdentityFile ~/.ssh/github/id_ed25519

7. Test the set­up. Use the fol­low­ing com­mand:

ssh -T git@github.com

On the ques­tion – Are you sure you want to con­tin­ue con­nect­ing (yes/​​​no)? – an­swer with yes. If every­thing went well you should re­ceive a greet­ing mes­sage like this:

Hi pa4080! You've successfully authenticated, ...

How to use Git with SSH key

1. If you have al­ready cloned repos­i­to­ry through HTTPS, by us­ing a com­mand as these:

git clone https://github.com/username/repository-name.git
git clone git://github.com/username/repository-name

Go in­side the repository's di­rec­to­ry and ex­e­cute the next com­mand to al­low work via SSH:

git remote set-url origin git@github.com:username/repository-name.git

2. Di­rect clone a repos­i­to­ry via SSH:

git clone git@github.com:username/repository-name.git

3. In ad­di­tion if you are us­ing VSC it will work with­out prob­lems with this set­up. For al­ready cloned repos­i­to­ries just use the Open Fold­er op­tion and all VSC Git fea­tures will work.

Ref­er­ences