Workflow Διαχείρiσης σύνδέσεων ssh και κλειδιών

Πολλές φορές είτε σαν developer, είτε σαν devops είτε σαν πατροπαράδοτος sysadmin ή συνδυασμός των παραπάνω θα χρειαστείτε να διαχειρίζεστε πολλούς server.

Αλλά κάθε server ίσως να έχετε πολλαπλά κλειδιά είτε επειδή δημιουργήσατε στο AMAZON AWS αρκετά .pem κλειδιά και ο χρόνος να σετάρεις ένα σύστημα deployment κλειδιών δεν βολεύει χρονικά. Είτε επειδή απλά ο άλλος στο έδωσε copy-paste το κλειδί (ενώ δεν θα έπρεπε), είτε επειδή θέλετε να έχετε διαφορετικό κλειδί για το github και διαφορετικό για τον server (you know για να χωρίζεις την διασκέδαση από την εργασία)

Όμως τελικά πως διαχειρίζεστε τόσα κλειδιά?

Βασικός τρόπος Διαχείρησης Κλειδιών

Γι αυτό υπάρχει ο φάκελος .ssh στον /home folder σας όπου αποτελεί ένα καλό σημείο να αποθηκεύετε τα ssh κλειδιά. Συνήθως είτε είναι ένα αρχείο σε μορφή .pem ή 2 αρχεία ένα ζέυγος αρχείωον που το ένα είναι σε μορφή .pub και και συνοδεύετε από το ιδιωτικό κλειδί που είναι ένα αρχείο χωρίς κατάληξη.

Εφόσον βάλετε τα κλειδιά εκεί τρέχετε την εντολή:

chmod 400 ~/.ssh/^το_κλειδί_σας^

Όπου ^το_κλειδί_σας^ αποτελεί είτε το κλειδί σε μορφή .pem ή το δημόσιο σας κλειδί που συνήθως είναι σε μορφή .pub ή το ιδιωτικό σας κλειδί το οποίο συνήθως δεν έχει κατάληξη. Σε περίπτωση που διαθέτετε ένα ζευγάρι δημοσίου - ιδιωτικού κλειδιού παρακαλώ τρέξτε την εντολή και στα 2 κλειδιά.

Μετέπειτα δημιουργείτε ένα αρχείο ~/.ssh/config που μπορείτε να ορίσετε εγγραφές με την ακόλουθη μορφή:

Host ^μνημονικό_όνομα^
  Hostname ^url_η_ip_server^
  IdentityFile ^όνομα_δημοσίου_κλειδιού_η_όνομα_pem_κλειδιού^
  Port ^θύρα_που_ακούει_ο_ssh_server^
  user ^username^

Όπου:

  • ^μνημονικό_όνομα^ ένα όνομα το οποίο μπορείτε να χρησιμοποιείτε σαν alias πχ. webserver.production
  • ^url_η_ip_server^ H διεύθυνση του server
  • ^όνομα_δημοσίου_κλειδιού_η_όνομα_pem_κλειδιού^ Έαν έχετε ένα αρχείο *.pem ορίζετε την διαδρομή αυτού ειδάλλως ορίζετε την διαδρομή του δημοσίου κλειδιού.
  • ^username^ Το όνομα χρήστη.
  • ^θύρα_που_ακούει_ο_ssh_server^ Το port στον οποίο ο server δέχετε συνδέσεις. Εάν είναι η θυρα 22 τότε μπορείτε να παραλείψετε αυτήν την γραμμή τελειώς.

Έτσι πλέον αντί για:

ssh ^username^@^url_η_ip_server^ -P ^θύρα_που_ακούει_ο_ssh_server^

Μπορείτε απλά να κάνετε:

ssh ^μνημονικό_όνομα^

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

Όμως σε περίπτωση που έχετε πολλαπλούς πελάτες ή θέλετε να έχετε συμμαζεμένα τα αρχεία και τα configuration που χρησιμοποιείτε για διασκέδαση και τα configuration για εργασία.
Τότε τι κάνετε;

Προσωπικά για να κρατώ τα αρχεία της εργασίας μου ειδικά τώρα που εργάζομαι από μακρόθεν έχω ένα φάκελο ~/job εκεί έχω κάνει ένα φάκελο ssh που τοποθετώ τα ssh configuration αλλά και τα κλειδιά (εργάζομαι σε μια εταιρεία που δεν έχει πολλαπλούς πελάτες).

Εφόσον τοποθετήσω όποια κλειδιά και ένα αρχείο κειμένου με το όνομα config (με την σύνταξη που έχει το ~/.ssh/config αρχείο) εκτελώ την εντολή:

chmod 400 ~/ssh/*
chmod +w ~/ssh/config

Μετέπειτα προσθέτω την ακόλουθη εγγραφή στην αρχή του αρχείου ~/.ssh/config (για να κανω edit εύκολα το αρχείο σε περίπτωση που αλλάξω εργασία):

Include /home/pcmagas/job/ssh/config

Αντί για /home/pcmagas/job/ssh/config ορίστε μια άλλη διαδρομή αρχείου. Τέλος, όποια διαδρομή κλειδιών αφορούν την εργασία μου τη μισθωτή το βάζω στον φάκελο /home/pcmagas/job/ssh και κάνω chown με permissions 400 ώστε να μην επιτρέπετε η εγγραφή από κανέναν.

Εσείς μπορείτε να έχετε παρόμοια λογική πχ. φάκελο ανά πελάτη (πχ. εάν εργάζεστε σε software house και έχετε συγκεκριμένους πελάτες ανά server) καλή ιδέα είναι να κάνετε έναν φάκελο ssh και να τοποθετείτε τα κλειδιά όπως και τις ρυθμίσεις εκεί. Μετά απλά τοποθετήτε μια Include έγγραφή στο ~/.ssh/config κατά προσωπική προτίμηση στην αρχή του αρχείου.

Και έχετε ένα έκολο μνημονικό όνομα για κάθε server.

5 Likes