# Setting SSH keys to work with Github :::info generate the keys after you've set up your Github account. You will need to use one of the e-mail addresses you've registered on github. ::: ## Creating ssh keys Open a bash terminal (gitbash in windows) ```bash ls -al ~/.ssh ``` Your output is going to look a little different depending on whether or not SSH has ever been set up on the computer you are using. If you haven't set up SSH on this computer, you should get: ``` ls: cannot access '/c/Users/username/.ssh': No such file or directory ``` If SSH has been set up on the computer you’re using, the public and private key pairs will be listed. The file names are either id_ed25519/id_ed25519.pub or id_rsa/id_rsa.pub depending on how the key pairs were set up. If they don’t exist on your computer, you can proceed to create one (using the email from your github account) ```bash $ ssh-keygen -t ed25519 -C "your@email.com" ``` If you are using a legacy system that doesn’t support the Ed25519 algorithm, use: ```bash $ ssh-keygen -t rsa -b 4096 -C "your_email@example.com" ``` ```output Generating public/private ed25519 key pair. Enter file in which to save the key (/c/Users/username/.ssh/id_ed25519): ``` We want to use the default file, so press <kbd>Enter</kbd> to continue. ```output Created directory '/c/Users/username/.ssh'. Enter passphrase (empty for no passphrase): ``` Now, it is prompting you for a passphrase. You want to create a passphrase that's secure enough, but be sure to use something memorable or save your passphrase somewhere, as there is no “reset my password” option. ```output Enter same passphrase again: ``` After entering the same passphrase a second time, we receive the confirmation ```output Your identification has been saved in /c/Users/username/.ssh/id_ed25519 Your public key has been saved in /c/Users/username/.ssh/id_ed25519.pub The key fingerprint is: SHA256:SMSPIStNyA00KPxuYu94KpZgRAYjgt9g4BA4kFy3g1o your@email.com The key's randomart image is: +--[ED25519 256]--+ |^B== o. | |%*=.*.+ | |+=.E =.+ | | .=.+.o.. | |.... . S | |.+ o | |+ = | |.o.o | |oo+. | +----[SHA256]-----+ ``` The “identification” is actually the private key. You should never share it. The public key is appropriately named. The “key fingerprint” is a shorter version of a public key. Now that we have generated the SSH keys, we will find the SSH files when we check. ```bash ls -al ~/.ssh drwxr-xr-x 1 username 197121 0 Jul 16 14:48 ./ drwxr-xr-x 1 username 197121 0 Jul 16 14:48 ../ -rw-r--r-- 1 username 197121 419 Jul 16 14:48 id_ed25519 -rw-r--r-- 1 username 197121 106 Jul 16 14:48 id_ed25519.pub ``` Now we run the command to check if GitHub can read our authentication. ```bash ssh -T git@github.com The authenticity of host 'github.com (192.30.255.112)' can't be established. RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? y Please type 'yes', 'no' or the fingerprint: yes Warning: Permanently added 'github.com' (RSA) to the list of known hosts. git@github.com: Permission denied (publickey). ``` Now, we need to copy the public key. Be sure to include the .pub at the end, otherwise you’re looking at the private key. ```bash cat ~/.ssh/id_ed25519.pub ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDmRA3d51X0uu9wXek559gfn6UFNF69yZjChyBIU2qKI a.linguini@ratatouille.fr ``` Now, going to GitHub.com, click on your profile icon in the top right corner to get the drop-down menu. Click “Settings,” then on the settings page, click “SSH and GPG keys,” on the left side “Account settings” menu. Click the “New SSH key” button on the right side. Now, you can add the title (You can use the title “My Laptop” or something that helps you to remember where the original key pair files are located), paste your SSH key into the field, and click the “Add SSH key” to complete the setup. Now that we’ve set that up, let’s check our authentication again from the command line. ```bash ssh -T git@github.com Hi usernameo! You've successfully authenticated, but GitHub does not provide shell access. ``` ```bash eval $(ssh-agent) ssh-add ~/.ssh/id_ed25519 ``` ###### tags: `mphy0021` `teaching` `guides` :::spoiler Windows follow this :::