Zarządzanie wieloma kluczami SSH

Często przychodzi nam pracować z różnymi dostawcami hostingu na repozytoria GIT, takimi jak Github, Gitlab czy Bitbucket. Wszystko jest w porządku kiedy do wszystkich tych serwisów możemy dodać ten sam klucz SSH, jednak czasem bywa, że muszą to być inne klucze ssh, ponieważ potrzebne jest utworzenie dwóch różnych kont na jednym serwisie. Na przykład firmowe i prywatne (wiem, że to dziwne, ale takie sytuacje się zdarzają).

Tworzenie kluczy

Wpisz w konsoli polecenie

$ ssh-keygen -t rsa -C "your_name@home_email.com"

Kiedy zobaczysz poniższy komunikat

Generating public/private rsa key pair. 
Enter file in which to save the key (/home/user_name/.ssh/id_rsa):

Podaj nazwę dla pary kluczy inną niż proponowana domyślna, np. id_rsa_home.

Następnie wykonaj tej sam krok dla innego adresu e-mail (np. $ ssh-keygen -t rsa -C "your_name@company_email.com") i podaj odpowiednią nazwę plików (np. id_rsa_company).

Po wyświetleniu zawartości katalogu ssh ($ ls ~/.ssh) powinieneś zobaczyć listę plików:

id_rsa_home  id_rsa_company  id_rsa_home.pub  id_rsa_company.pub

Dodawanie pliku konfiguracyjnego

Aby zarządzać wieloma kluczami ssh należy utworzyć plik konfiguracyjny w którym łatwo zdefiniować jaki klucz powinien być używany w danym momencie. Załóżmy, że posiadamy prywatne konto na githubie, a dodatkowo firmowe zarówno na githubie jak i wewnętrznym gitlabie.

Wykonaj polecenia

$ cd ~/.ssh/
$ touch config
$ nano config

I wypełnij nowy plik config:

# GITLAB
Host gitlab.company_url.com
   HostName gitlab.company_url.com
   PreferredAuthentications publickey
   IdentityFile ~/.ssh/id_rsa_company

# Home account
Host home.github.com
  HostName github.com
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/id_rsa_home

# Company account
Host company.github.com
  HostName github.com
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/id_rsa_company

Dodanie kluczy do rejestru

Najpierw musimy wyczyścić cache używając polecenia $ ssh-add -D, ale jeśli zobaczysz komunikat: Could not open a connection to your authentication agent., użyj polecenia

eval `ssh-agent -s`

i powtórz poprzednie polecenie.

Sprawdź dodane klucze:

$ ssh-add -l
2048 d4:e0:39:e1:bf:6f:e3:26:14:6b:26:73:4e:b4:53:83 /home/mateusz/.ssh/id_rsa_home (RSA)
2048 7a:32:06:3f:3d:6c:f4:a1:d4:65:13:64:a4:ed:1d:63 /home/mateusz/.ssh/id_rsa_company (RSA)

Jeśli nie zobaczyłeś żadnych wpisów trzeba jeszcze dodać klucze do rejestru.

$ ssh-add ~/.ssh/id_rsa_company
$ ssh-add ~/.ssh/id_rsa_home

Potwierdzenie połączenia

Kiedy połączysz wygenerowane klucze do swoich kont w serwisach hostingowych według instrukcji każdego z nich możesz śmiało sprawdzić swoje połączenie ssh.

$ ssh -T [email protected]_url.com
Welcome to GitLab, CompanyUser!

$ ssh -T [email protected]
Hi home_user! You\'ve successfully authenticated, but GitHub does not provide shell access.

$ ssh -T [email protected]
Hi company_user! You\'ve successfully authenticated, but GitHub does not provide shell access.

Wybór maila w projekcie

Nie zapomnij aby do każdego projektu ustawić odpowiedni e-mail, który ma być spięty z Twoim kluczem ssh.

$ cd ~/home_project
$ git config user.email "your_name@home_email.com" 
Programista skupiony głównie wokół technologii webowych, ale nie przywiązujący się do konkretnych języków i narzędzi. Skoncentrowany na ciągłym rozwoju, zwolennik ruchu Software Crafmanship. Na codzień pracując w DAZN ma okazję rozwijać interesujący projekt do streamingu wydarzeń sportowych. Prywatnie fan sportu, a szczególnie piłki nożnej. Po godzinach próbuje również swoich sił w piwowarstwie domowym.
PODZIEL SIĘ