Jak generować klucze SSH dla GitHub
Opublikowany: 2022-02-05Git i GitHub to niezbędne narzędzia dla każdego programisty. Są szeroko stosowane w prawie każdym projekcie tworzenia oprogramowania.
Istnieją inne usługi hostingowe Git, takie jak Gitlab i Bitbucket, ale GitHub jest najpopularniejszym wyborem dla programistów. Możesz nawet edytować swój profil, aby wydawał się bardziej atrakcyjny dla rekruterów.
Możesz używać Git i GitHub do organizowania swoich projektów, współpracy z innymi programistami i — oczywiście — w Kinsta.
Ale ponieważ Git i GitHub są ze sobą powiązane, ale są różnymi narzędziami, musisz stale aktualizować swój przepływ pracy za pomocą każdego z nich.
Zalecamy używanie kluczy SSH dla każdego komputera. W tym samouczku dowiesz się, jakie one są, niektóre z ich zalet oraz jak generować i konfigurować klucze GitHub SSH.
Zacznijmy!
Co to są klucze SSH?
Mówiąc najprościej, klucze SSH są poświadczeniami używanymi przez protokół SSH (Secure Shell), aby umożliwić bezpieczny dostęp do zdalnych komputerów przez Internet. Zwykle uwierzytelnianie odbywa się w środowisku wiersza polecenia.
Protokół ten jest oparty na architekturze klient-serwer, co oznacza, że jako użytkownik (lub „klient”) musisz używać specjalnego oprogramowania, zwanego klientem SSH, aby zalogować się do zdalnego serwera i wykonywać polecenia. To jest w zasadzie to, co robisz podczas uwierzytelniania za pośrednictwem terminala w GitHub.

Ale SSH jest używany nie tylko w GitHub. Jest szeroko stosowany przez inne platformy, takie jak Kinsta, Google Cloud i Amazon Web Services, do tworzenia bezpiecznego kanału dostępu do ich usług.
Teraz, zagłębiając się w to, jak naprawdę działają klucze SSH, musisz zrozumieć różnice między kluczami publicznymi i prywatnymi.
Klucze publiczne a klucze prywatne
Zacznijmy od podstaw.
Protokół SSH wykorzystuje technikę kryptografii zwaną szyfrowaniem asymetrycznym . Ten termin może brzmieć skomplikowanie i dziwnie, ale nic nie może być dalsze od prawdy.
Zasadniczo szyfrowanie asymetryczne to system, który wykorzystuje parę kluczy, a mianowicie klucze publiczne i prywatne .
Jak łatwo się domyślić, klucz publiczny można udostępnić każdemu. Jego głównym celem jest szyfrowanie danych, konwertowanie wiadomości na tajny kod lub zaszyfrowany tekst. Ten klucz jest zwykle wysyłany do innych systemów — na przykład serwerów — w celu zaszyfrowania danych przed wysłaniem ich przez Internet.
Z drugiej strony klucz prywatny to ten, który musisz zachować dla siebie. Służy do odszyfrowywania zaszyfrowanych danych za pomocą Twojego klucza publicznego. Bez tego nie da się odszyfrować zaszyfrowanych informacji.
Ta metoda pozwala Tobie i serwerowi zachować bezpieczny kanał komunikacyjny do przesyłania informacji.
Oto, co dzieje się w tle, gdy łączysz się z serwerem przez SSH:
- Klient wysyła klucz publiczny do serwera.
- Serwer prosi klienta o podpisanie losowej wiadomości zaszyfrowanej kluczem publicznym przy użyciu klucza prywatnego.
- Klient podpisuje wiadomość i przekazuje wynik do serwera.
- Między klientem a serwerem nawiązywane jest bezpieczne połączenie.
Ważne jest, aby przechowywać klucze prywatne i udostępniać je nikomu w żadnych okolicznościach. Są dosłownie kluczem do wszystkich przesyłanych do Ciebie informacji.
Używanie kluczy SSH z GitHub
Od 13 sierpnia 2021 r. Github nie akceptuje już uwierzytelniania hasła dla dostępu z wiersza poleceń. Oznacza to, że teraz musisz uwierzytelnić się za pomocą osobistego tokena dostępu lub użyć klucza SSH (trochę wygodniej).
Oto, co się dzieje, gdy próbujesz uwierzytelnić się za pomocą hasła GitHub przez HTTP w terminalu:
Username for 'https://github.com': yourusername Password for 'https://[email protected]': remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information. fatal: Authentication failed for 'https://github.com/yourusername/repository.git/'
GitHub potrzebuje Twojego klucza publicznego, aby upoważnić Cię do edycji dowolnego z Twoich repozytoriów przez SSH.
Zobaczmy, jak możesz generować klucze SSH lokalnie.
Jak lokalnie generować klucze SSH
Teraz, gdy już wiesz trochę o protokole SSH i różnicach między kluczami publicznymi i prywatnymi, nadszedł czas, aby skonfigurować bezpieczny kanał SSH między twoją maszyną a repozytoriami GitHub.
Zanim przejdziemy dalej, powinieneś mieć już konto GitHub i terminal/wiersz poleceń z zainstalowanym Git w swoim systemie. Jeśli używasz systemu Windows, upewnij się, że zainstalowałeś Git bash, który zawiera wszystkie narzędzia, których będziesz potrzebować, wraz z wbudowanym samouczkiem.
Klient OpenSSH to najpopularniejsze oprogramowanie typu open source używane do łączenia się przez SSH. Nie musisz się martwić o swój system operacyjny, ponieważ jest on domyślnie instalowany w systemach Linux, macOS i Windows 10.
Aby wygenerować lokalne klucze SSH, musisz uruchomić wiersz poleceń w systemie Windows lub terminal w systemach opartych na systemie Unix. Zwykle możesz to zrobić, wyszukując „terminal”, „cmd” lub „powershell” w panelu aplikacji, a następnie klikając wyświetloną ikonę.

Po wykonaniu tej czynności powinieneś mieć okno podobne do poniższego obrazu.

Uruchom następujące polecenie, aby wygenerować lokalną parę kluczy SSH:
ssh-keygen -t ed25519 -C "[email protected]"
Czas zdradzić ci sekret: nikt tak naprawdę nie pamięta tego polecenia! Większość programistów musi to Google za każdym razem, ponieważ:
- To naprawdę długa komenda, z zapomnianymi, losowo wyglądającymi liczbami.
- Używamy go rzadko, więc nie warto zapamiętywać go przez większość czasu.
Jednak ważne jest, aby zrozumieć każde polecenie, które wprowadzamy do naszych terminali, więc zobaczmy, co oznacza każda jego część.
- ssh-keygen: Narzędzie wiersza poleceń używane do tworzenia nowej pary kluczy SSH. Możesz zobaczyć jego flagi z pomocą
ssh-keygen help
- -t ed25519: flaga
-t
służy do wskazania algorytmu używanego do tworzenia podpisu cyfrowego pary kluczy. Jeśli twój system to obsługuje,ed25519
jest najlepszym algorytmem, którego możesz użyć do tworzenia par kluczy SSH. - -C „e-mail”: flaga
-c
służy do umieszczania niestandardowego komentarza na końcu klucza publicznego, którym zwykle jest adres e-mail lub identyfikator twórcy pary kluczy.
Po wpisaniu polecenia w terminalu będziesz musiał wprowadzić plik, w którym chcesz zapisać klucze. Domyślnie znajduje się w twoim katalogu domowym, w ukrytym folderze o nazwie „.ssh”, ale możesz go zmienić na dowolny.

Następnie zostaniesz poproszony o podanie hasła do dodania do pary kluczy. Dodaje to dodatkową warstwę bezpieczeństwa, jeśli w dowolnym momencie Twoje urządzenie zostanie naruszone. Dodanie hasła nie jest obowiązkowe, ale zawsze jest to zalecane.
Tak wygląda cały proces:

Jak widać, polecenie to generuje dwa pliki w wybranym katalogu (zwykle ~/.ssh ): klucz publiczny z rozszerzeniem .pub
i prywatny bez rozszerzenia.
Później pokażemy, jak dodać klucz publiczny do konta GitHub.
Dodaj klucz SSH do ssh-agent
Program ssh-agent działa w tle, bezpiecznie przechowuje klucze prywatne i hasła oraz utrzymuje je gotowe do użycia przez ssh. To świetne narzędzie, które pozwala uniknąć wpisywania hasła za każdym razem, gdy chcesz połączyć się z serwerem.
Z tego powodu zamierzasz dodać swój nowy klucz prywatny do tego agenta. Oto jak:
- Upewnij się, że ssh-agent działa w tle.
eval `ssh-agent` # Agent pid 334065
Jeśli otrzymasz komunikat podobny do tego, jeśli wszystko jest w porządku. Oznacza to, że ssh-agent działa pod określonym identyfikatorem procesu (PID).
- Dodaj swój klucz prywatny SSH (ten bez rozszerzenia) do ssh-agent.
ssh-add ~/.ssh/kinsta_keys
Zastąp kinsta_keys nazwą swojego klucza SSH. Jeśli jest to pierwszy utworzony klucz, powinien mieć nazwę „id_algorithm_used”, na przykład id_ed25519 .
Dodaj klucz SSH do konta GitHub
Ostatnim krokiem jest dodanie klucza publicznego do konta GitHub. Wystarczy postępować zgodnie z tymi instrukcjami:
- Skopiuj swój klucz publiczny SSH do schowka. Możesz otworzyć plik, w którym się znajduje, za pomocą edytora tekstu i skopiować go lub użyć terminala, aby wyświetlić jego zawartość.
cat ~/.ssh/kinsta_keys.pub # ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJl3dIeudNqd0DPMRD6OIh65tjkxFNOtwGcWB2gCgPhk [email protected]
- Zaloguj się do GitHub ] i przejdź do prawej górnej części strony, kliknij swoje zdjęcie profilowe i wybierz Ustawienia.
Ustawienia GitHuba. - Następnie w profilu w ustawieniach kliknij klucze SSH i GPG .
Klucze SSH i GPG. - Kliknij przycisk Nowy klucz SSH .
Nowy przycisk klucza SSH. - Nadaj swojemu nowemu kluczowi SSH na GitHub tytuł — zwykle urządzenie, z którego będziesz używać tego klucza. A następnie wklej klucz w obszarze Klucz .
Dodaj nowy formularz klucza SSH. - Dodaj swój klucz SSH.
Dodaj przycisk klucza SSH.
Przetestuj połączenie SSH za pomocą funkcji Repo Push
Czas przetestować wszystko, co zrobiłeś do tej pory. Zamierzasz zmienić, zatwierdzić i wypchnąć do jednego z istniejących repozytoriów za pomocą SSH, aby upewnić się, że połączenie jest prawidłowo skonfigurowane.
Wszystkie plany hostingowe Kinsta obejmują całodobowe wsparcie naszych doświadczonych programistów i inżynierów WordPressa. Porozmawiaj z tym samym zespołem, który wspiera naszych klientów z listy Fortune 500. Sprawdź nasze plany!
W naszym przykładzie zmodyfikujemy prostą witrynę HTML, którą utworzyliśmy w naszym samouczku Git for Web Development.
Najpierw musimy sklonować repozytorium na naszą lokalną maszynę. Możemy przejść do strony repozytorium na GitHub i skopiować podany przez nią adres SSH.

Następnie sklonuj repozytorium za pomocą terminala:
git clone [email protected]:DaniDiazTech/HTML-site.git
Teraz dodajmy prosty tag <h1>
w pliku index.html :
... <div class="container my-2"> <h1 class="text-center">A new title!<h1> </div> <div class="container my-3"> ...

Nie dotykamy żadnego kodu JavaScript ani CSS, aby uprościć tę edycję. Ale jeśli znasz się na JavaScript, możesz znaleźć miejsce w Kinsta. Sprawdź umiejętności kodowania, których potrzebujesz, aby być częścią zespołu Kinsta.
Po wykonaniu tej czynności zatwierdź zmiany:
git commit -am "Added a simple title"
I wepchnij je do GitHub tak, jak zwykle.
git push
Jeśli wszystko poszło dobrze, gratulacje! Po prostu konfigurujesz połączenie SSH między komputerem a GitHub.
Zarządzaj wieloma kluczami SSH dla różnych kont GitHub
Jeśli masz wiele kont GitHub — powiedzmy jedno do osobistych projektów i jedno do pracy — trudno jest używać SSH dla obu z nich. Zwykle potrzebujesz oddzielnych maszyn do uwierzytelniania na różnych kontach GitHub.
Ale można to łatwo rozwiązać, konfigurując plik konfiguracyjny SSH.
Przejdźmy do tego.
- Utwórz kolejną parę kluczy SSH i dodaj ją do drugiego konta GitHub. Zapamiętaj nazwę pliku, do którego przypisujesz nowy klucz.
ssh-keygen -t ed25519 -C "[email protected]"
- Utwórz plik konfiguracyjny SSH. Plik konfiguracyjny informuje program ssh, jak powinien się zachowywać. Domyślnie plik konfiguracyjny może nie istnieć, więc utwórz go w folderze .ssh/:
touch ~/.ssh/config
- Zmodyfikuj plik konfiguracyjny SSH. Otwórz plik konfiguracyjny i wklej poniższy kod:
#Your day-to-day GitHub account Host github.com HostName github.com IdentityFile ~/.ssh/id_ed25519 IdentitiesOnly yes # Work account Host github-work HostName github.com IdentityFile ~/.ssh/work_key_file IdentitiesOnly yes
Teraz, za każdym razem, gdy musisz uwierzytelnić się przez SSH przy użyciu konta służbowego lub dodatkowego, zmieniasz nieco adres SSH repozytorium z:
[email protected]:workaccount/project.git
…do:
[email protected]:workaccount/project.git
Streszczenie
Gratulacje — nauczyłeś się większości praktycznej wiedzy potrzebnej do łączenia się z GitHub przez SSH!
W tym samouczku omówiono potrzebę protokołu SSH, różnice między kluczami publicznymi i prywatnymi, sposób generowania kluczy, dodawania ich do GitHub, a nawet zarządzania wieloma kluczami SSH dla różnych kont GitHub. Pamiętaj, że jeśli nie chcesz stracić dostępu do wszystkiego, Twój klucz prywatny musi pozostać taki: prywatny.
Mając tę wiedzę, jesteś teraz gotowy do opracowania bezbłędnego przepływu pracy za pomocą Git i GitHub. Kontynuuj kodowanie!