Σετάρισμα SSH και GPG Keys για GitHub και GitLab

Στο άρθρο αυτό θα σας δείξουμε πως να σετάρετε SSH και GPG keys για χρήση με GitHub και GitLab. Θα δημιουργήσουμε από ένα SSH και από ένα GPG key ξεχωριστά για κάθε πλατφόρμα.

Η χρήση SSH keys είναι η ασφαλέστερη και προτιμητέα επιλογή προκειμένου να συνδέεστε με το GitHub /GitLab χωρίς να δίνετε κάθε φορά username/password.

Επίσης, με τα GPG keys, μπορείτε να βάζετε την ψηφιακή σας «υπογραφή» σε κάθε commit που κάνετε σε ένα repository, πιστοποιώντας την ταυτότητά σας ως author του συγκεκριμένου κώδικα που κάνατε commit. Αν και δεν προσφέρει παραπάνω ασφάλεια, εντούτοις, είναι καλή πρακτική.

Φανταστείτε ένα δημοφιλές repository με ανοιχτό κώδικα όπου πολλοί χρήστες κάνουν commit. Κάποιος πολύ εύκολα μπορεί να χρησιμοποιήσει το όνομα και το email σας στις ρυθμίσεις --author του git. Π.χ. git commit --author="John Doe <example@example.com και να κάνει commit κακόβουλο κώδικα προκειμένου να ξεγελάσει αυτόν ή αυτούς που θα κάνουν αποδοχή και merge τον κώδικα.

Με τη χρήση GPG key, το commit από κάποιον που δεν μπορεί να επαληθεύσει ότι είναι κάτοχος του email σας, δεν είναι ψηφιακά υπογεγραμμένο, εμφανίζεται με το badge unverified στο GitHub/GitLab και δεν μπορεί έτσι να γίνει εύκολα merge.

Το tutorial είναι αρκετά μεγάλο, οπότε φτιάξτε έναν καφέ και ας ξεκινήσουμε. Να σημειωθεί ότι οι ρυθμίσεις γίνονται σε λειτουργικό σύστημα Linux.

Προτού Ξεκινήσουμε

Πρωτού ξεκινήσουμε, θα χρειαστούμε τα εξής:

  • το username μας στο GitHub το οποίο μπορούμε να το βρούμε στη σελίδα https://github.com/settings/profile.
  • το username και user id στο GitLab τα οποία βρίσκουμε στη διεύθυνση https://gitlab.com/-/user_settings/profile.
  • το noreply email που μας παρέχει το GitHub. Είναι της μορφής [github_username]@users.noreply.github.com
  • το noreply email που μας παρέχει το GitLab. Είναι της μορφής [gitlab_userid]-[gitlab_username]@users.noreply.gitlab.com

Χρησιμοποιούμε τις noreply διευθύνσεις email προκειμένου να μη φαίνεται στα commits το προσωπικό μας email. Αν επιθυμείτε βέβαια, μπορείτε να χρησιμοποιήσετε το προσωπικό ή επαγγελματικό σας email.

Για να ενεργοποιήσετε το noreply email στο GitHub, θα πρέπει να πάτε στη διεύθυνση https://github.com/settings/emails και να κάνετε τικ στην επιλογή «Keep my email addresses private».

Στο GitLab θα πρέπει να πάτε στις ρυθμίσεις του προφίλ σας στη διεύθυνση https://gitlab.com/-/user_settings/profile και στην επιλογή «Commit email» να επιλέξετε «Use a private email …».

Ρυθμίσεις SSH

Δημιουργία SSH Keys

Ξεκινάμε δημιουργώντας  ξεχωριστάssh κλειδιά για το GitHub και το GitLab.

Θα χρησιμοποιήσουμε το ssh-keygen και τον αλγόριθμο ed25519 για να δημιουργήσουμε τα SSH keys. Μεγάλη προσοχή να δίνετε στα password που θα χρησιμοποιήσετε. Να είναι διαφορετικά, με πολλούς χαρακτήρες και με όσο μεγαλύτερη εντροπία γίνεται.

Για το GitHub χρησιμοποιούμε στο terminal την εντολή:

και για το GitLab την εντολή:

Πηγαίνουμε στο φάκελο ~/.ssh και εκεί θα δούμε τα κλειδιά. Αυτά με την κατάληξη .pub είναι τα δημόσια κλειδιά που θα καταχωρήσουμε στο GitHub και στο GibLab:

Καταχώρηση SSH Keys Σε GitHub και GitLab

Στη συνέχεια θα καταχωρήσουμε τα SSH keys σε GitHub και στη συνέχεια σε GitLab.

Πρώτα αντιγράφουμε το δημόσιο κλειδί του GitHub με τη βοήθεια του xclip στο clipboard:

Έπειτα, πάμε στη διεύθυνση https://github.com/settings/keys και πατάμε το κουμπί «New SSH key». Στην επόμενη σελίδα, δίνουμε έναν τίτλο για το κλειδί στο πεδίο «Title» και κάνουμε επικόλληση στο πεδίο «Key». Τέλος πατάμε το κουμπί «Add SSH key» για να αποθηκευθεί το κλειδί.

Κάνουμε την ίδια διαδικασία στο GitLab.

Αντιγράφουμε το δημόσιο κλειδί του GitLab:

Πάμε στη διεύθυνση https://gitlab.com/-/user_settings/ssh_keys, πατάμε το κουμπί «Add new key», δίνουμε έναν τίτλο στο πεδίο «Title», κάνουμε επικόλληση στο πεδίο «Key» και τέλος πατάμε το κουμπί «Add key».

Παραμετροποίηση SSH Config

Μέχρι στιγμής, έχουμε δημιουργήσει τα SSH keys, τα έχουμε καταχωρήσει σε GitHub και GitLab αλλά όταν κάνουμε πχ git pull ή git push κλπ, το git δε γνωρίζει ποιο SSH κλειδί να χρησιμοποιήσει.

Θα πρέπει να κάνουμε κάποιες ρυθμίσεις τοπικά στο SSH προκειμένου όταν για παράδειγμα, δουλεύουμε σε ένα repository το οποίο φιλοξενείται στο GitHub και κάνουμε πχ git push, αυτόματα να γίνει η επιλογή του SSH key για το GitHub id_ed25519_github.

Δημιουργούμε ένα αρχείο ~/.ssh/config με την εντολή:

ή αν το αρχείο ήδη υπάρχει, το ανοίγουμε με:

Βάζουμε τις παρακάτω «οδηγίες» στο αρχείο και το αποθηκεύουμε:

Έλεγχος Σωστής Λειτουργίας SSH

Μπορούμε πλέον να ελέγξουμε αν όλα πήγαν καλά μέχρι στιγμής.

Στο terminal δίνουμε την εντολή:

Επειδή το SSH key χρησιμοποιείται για πρώτη φορά, θα εμφανιστεί κάτι σαν το ακόλουθο μήνυμα:

Θα απαντήσουμε yes και θα μας δώσει το μήνυμα:

Στη συνέχεια θα μας ζητηθεί το password που δώσαμε όταν δημιουργήσαμε το κλειδί. Εφόσον όλα πήγαν καλά, θα πρέπει η εντολή να επιστρέψει το μήνυμα:

Ομοίως και για το GitLab, δίνουμε την εντολή:

μας ζητείται το password και μετά θα πρέπει να εμφανιστεί το μήνυμα:

Αυτό σημαίνει ότι όταν κάναμε ssh, με βάσει τις ρυθμίσεις στο ~/.ssh/config, χρησιμοποιήθηκε το σωστό key για GitHub και GitLab.

Όλα πλέον είναι εντάξει με τις ρυθμίσεις για SSH και όποτε «σπρώχνουμε» κώδικα, δε θα μας ζητείται username και password, ενώ θα χρησιμοποιείται το αντίστοιχο SSH key. Πλέον μπορούμε να συνεχίσουμε με τα GPG keys!

Ρυθμίσεις GPG

Δημιουργία GPG Keys

Δημιουργούμε το πρώτο GPG key για το GitHub στο terminal με την εντολή:

Θα εμφανιστούν κάποιες ερωτήσεις σχετικά με τον τύπο του κλειδιού, το μέγεθος του κλειδιού, και τη διάρκειά του. Σε όλα πατάμε το Enter προκειμένου να επιλεχθούν οι default τιμές.

Στη συνέχεια δίνουμε το όνομά μας και τη διεύθυνση email.

Προσέχουμε, η διεύθυνση email να είναι η [github_username]@users.noreply.github.com ή εναλλακτικά το προσωπικό/επαγγελματικό email που έχουμε δώσει στο GitHub. Είναι η ίδια διεύθυνση email που χρησιμοποιήσαμε νωρίτερα για τη δημιουργία του SSH key.

Προσέχουμε επίσης να δώσουμε έναν κωδικό-password που θα έχει μεγάλη εντροπία.

Στο τέλος θα εμφανιστεί ένα μήνυμα επιβεβαίωσης όπως το παρακάτω:

Αυτό σημαίνει ότι δημιουργήθηκε το GPG key επιτυχώς.

Συνεχίζουμε με το GPG key για το GitHub χρησιμοποιώντας την ίδια εντολή:

Πατάμε Enter για να γίνει επιλογή των default τιμών και δίνουμε το όνομα και το email μας.

Προσέχουμε και πάλι να δώσουμε το σωστό email. Αυτό είναι το email του λογαριασμού μας στο GitHub ή καλύτερα το  [gitlab_userid]-[gitlab_username]@users.noreply.gitlab.com (ίδιο με αυτό που χρησιμοποιήσαμε κατά τη δημιουργία του SSH key για το GitHub).

Έλεγχος Κλειδιών GPG

Για να δούμε τα δύο GPG κλειδιά που μόλις δημιουργήσαμε, χρησιμοποιούμε την εντολή:

Θα εμφανιστεί το παρακάτω μήνυμα:

Αυτό που είναι σημαντικό είναι το ID του κάθε GPG key το οποίο είναι το string αμέσως μετά το rsa4096/ στη γραμμή sec, δηλαδή το AAAAAAAAAA111111 για το GitHub και το BBBBBBBBBB222222 για το GitLab.

Θα μας χρειαστούν για να κάνουμε εξαγωγή/αντιγραφή των κλειδιών προκειμένου να τα καταχωρήσουμε στις δύο πλατφόρμες.

Να σημειώσουμε ότι τα IDs των κλειδιών AAAAAAAAAA111111 και BBBBBBBBBB222222 είναι τυχαία και δίνονται μόνο ως παράδειγμα για τους σκοπούς αυτού του άρθρου.

Καταχώρηση GPG Keys Σε GitHub και GitLab

Τώρα θα προσθέσουμε τα δύο GPG keys σε GitHub και GitLab.

Πρώτα χρησιμοποιούμε την παρακάτω εντολή για την εξαγωγή του public key. Προσέχουμε να χρησιμοποιήσουμε το σωστό GPG key ID για το GitHub, δηλαδή το ΑΑΑΑΑΑΑΑΑΑ111111:

Θα εμφανιστεί το public key με την παρακάτω μορφή:

Κάνουμε αντιγραφή το παραπάνω μήνυμα, πάμε στη διεύθυνση https://github.com/settings/keys και πατάμε το κουμπί «New GPG key». Δίνουμε έναν τίτλο στο πεδίο «Title», κάνουμε επικόλληση στο πεδίο «Key» και πατάμε το κουμπί «Add GPG key». Πλέον το κλειδί, έχει καταχωρηθεί στο GitHub.

Θα επαναλάβουμε την ίδια διαδικασία στο GitLab. Κάνουμε εξαγωγή το public key χρησιμοποιώντας το αντίστοιχο GPG key ID για το GitLab, δηλαδή BBBBBBBBBB222222:

Θα εμφανιστεί το public key με την παρακάτω μορφή:

Κάνουμε αντιγραφή το παραπάνω μήνυμα, πάμε στη διεύθυνση https://gitlab.com/-/user_settings/gpg_keys, και πατάμε το κουμπί «Add new key». Κάνουμε επικόλληση στο πεδίο «Key» και πατάμε το κουμπί «Add key». Πλέον το κλειδί, έχει καταχωρηθεί στο GitLab.

Παραμετροποίηση Git Config Για Χρήση GPG Keys

Θα χρειαστεί τώρα να κάνουμε κάποιες αλλαγές στις τοπικές ρυθμίσεις του git προκειμένου όταν κάνουμε commit σε GitHub repository να χρησιμοποιεί το GPG key του GitHub, και αντίστοιχα για commits σε repositories που φιλοξενούνται στο GitLab, το key του GitLab.

Δημιουργούμε τα εξής 2 αρχεία:

  • ~/.gitconfig_github
  • ~/.gitconfig_gitlab

Ανοίγουμε το αρχείο ~/.gitconfig_github με nano ~/.gitconfig_github (ή τον editor της επιλογής μας) και προσθέτουμε το παρακάτω:

και στο ~/.gitconfig_gitlab βάζουμε τα εξής:

Προσέχουμε ότι σε κάθε αρχείο, χρησιμοποιούμε το GPG key ID και το αντίστοιχο email που χρησιμοποιήσαμε όταν το δημιουργήσαμε. Δηλαδή, το GPG key ID του GitHub μαζί με το email του GitHub, και το αντίστοιχο key ID του GitLab μαζί με το email του GitLab.

Ανοίγουμε το αρχείο ~/.gitconfig:

και βάζουμε τις ακόλουθες «οδηγίες»:

Με λίγα λόγια, δώσαμε «οδηγίες» στο Git, όταν το git remote URL περιέχει github.com τότε θα χρησιμοποιηθεί το αρχείο ~/.gitconfig_github και αν το remote URL περιέχει το gitlab.com θα χρησιμοποιηθεί το αρχείο ~/.gitconfig_gitlab.

ΠΡΟΣΟΧΗ!!! Η οδηγία-συνθήκη [includeIf <condition>] δουλεύει μόνο σε εκδόσεις Git ανώτερες του 2.36. Ελέγξτε την έκδοσή σας με git --version και κάντε αναβάθμιση αν χρειαστεί.

Τελικός Έλεγχος SSH και GPG Κλειδιών

Προκειμένου να ελέγξετε ότι όλα πήγαν καλά, δημιουργήστε ένα νέο – κενό repository στο GitHub και άλλο ένα στο GitLab. Δημιουργήστε αντίστοιχα στον υπολογιστή σας 2 μικρά απλά git projects με ένα άδειο README.md αρχείο μόνο. Κάντε τα commit και push.

Εκτός απροόπτου, ο κώδικας θα ανέβει στα 2 repositories χωρίς να σας ζητηθεί να δώσετε username/password. Έχει γίνει σωστά η χρήση των δύο SSH κλειδιών που δημιουργήσαμε!

Στη συνέχεια, πηγαίνετε στις σελίδες των repositories στο GitHub και GitLab, όπου θα δείτε το αρχείο README.md, και μετά ελέγξτε τα commits.

Θα δείτε ότι και τα 2 commits σε GitHub και GitLab έχουν ένα badge που λέει «Verified» όπως το παρακάτω:

Χωρίς τη χρήση GPG key για την υπογραφή του commit, θα εμφανιζόταν ως εξής:

Έχει γίνει δηλαδή σωστή χρήση των GPG κλειδιών που δημιουργήσαμε για την «υπογραφή» των commits!

Σημείωση: Προκειμένου να ενεργοποιήσετε τα Verified/Unverified badges στο GitHub, πηγαίνετε στη σελίδα https://github.com/settings/keys και στις ρυθμίσεις για «Vigilant mode», κάνετε τικ στην επιλογή «Flag unsigned commits as unverified». Για το GitLab δε χρειάζετε να κάνετε κάτι στις ρυθμίσεις. Βάζει το Verified badge όταν δει ότι είναι «signed» το commit.

Αν έχετε κάποιες απορίες ή παρατηρήσεις για το άρθρο, παρακαλώ γράψτε μας στα σχόλια.

Αφήστε μια απάντηση

Η ηλ. διεύθυνση σας δεν δημοσιεύεται. Τα υποχρεωτικά πεδία σημειώνονται με *