Το προφίλ μας στο Google Plus
1

Ενεργοποίηση του SSH agent σε terminal sessions

Η προστασία ενός ιδιωτικού κλειδιού SSH με passphrase προτείνεται ενθουσιωδώς όταν μιλάμε για laptop που είναι πιθανό να ξεχάσουμε κάπου ή ακόμη και να κλαπεί. Επίσης, το passphrase είναι έξυπνη κίνηση όταν περισσότεροι από ένας άνθρωποι έχουν πρόσβαση στον ίδιο λογαριασμό χρήστη ή όταν, πολύ απλά, δεν εμπιστευόμαστε το μηχάνημα στο οποίο βρίσκεται αποθηκευμένο κάποιο ιδιωτικό μας κλειδί.

Κάθε φορά που μια εφαρμογή χρειάζεται πρόσβαση σε ιδιωτικό κλειδί SSH κι αυτό είναι προστατευμένο με passphrase, αμέσως ζητείται η πληκτρολόγησή του. Με την προϋπόθεση ότι το passphrase δίνεται σωστά, επιτρέπεται η πρόσβαση στο κλειδί.

Σε συστήματα Linux με σύγχρονο περιβάλλον γραφικών όπως, π.χ., είναι το GNOME, για τη διευκόλυνση του χρήστη ενεργοποιείται ο λεγόμενος ssh-agent. Χάρη σ’ αυτό το εργαλείο, το ιδιωτικό κλειδί παραμένει στη μνήμη καθ’ όλη τη διάρκεια της τρέχουσας συνεδρίας (session) κι ο agent αναλαμβάνει εκείνος το public key authentication για λογαριασμό άλλων εφαρμογών. Πρακτικά, λοιπόν, δεν χρειάζεται να πληκτρολογούμε τόσο συχνά το passphrase ενός ιδιωτικού κλειδιού. Πέρα από την ευκολία, η άμεση πρόσβαση σε ένα ιδιωτικό κλειδί SSH, δηλαδή η πρόσβαση σ’ αυτό χωρίς την πληκτρολόγηση passphrase, είναι απαραίτητη προϋπόθεση για την ορθή λειτουργία scripts τα οποία προϋποθέτουν ότι οι συνδέσεις SSH προς άλλα hosts γίνονται χωρίς να ζητείται password ή passphrase.

Συνδέσεις μέσω SSH σε απομακρυσμένα hosts, βάσει public key authentication. Όταν το ιδιωτικό μας κλειδί προστατεύεται από passphrase, ένας τρόπος ώστε να *μη χρειάζεται* να το πληκτρολογούμε διαρκώς στο τρέχον terminal session είναι να δώσουμε το κλειδί στον ssh-agent με τη βοήθεια του εργαλείου ssh-add.

Συνδέσεις μέσω SSH σε απομακρυσμένα hosts, βάσει public key authentication. Όταν το ιδιωτικό μας κλειδί προστατεύεται από passphrase, ένας τρόπος ώστε να *μη χρειάζεται* να το πληκτρολογούμε διαρκώς στο τρέχον terminal session είναι να δώσουμε το κλειδί στον ssh-agent με τη βοήθεια του εργαλείου ssh-add.

Η κατάσταση είναι ελαφρώς διαφορετική όταν συνδεόμαστε στην κονσόλα τερματικού ενός απομακρυσμένου μηχανήματος Linux, αφού τότε δεν θα φορτωθεί αυτόματα το ssh-agent. Ευτυχώς μπορούμε να το ξεκινήσουμε χειροκίνητα και μετά να του δώσουμε το ιδιωτικό μας κλειδί. Παρακολουθείστε το ακόλουθο σενάριο, δείτε και το συνοδευτικό screenshot.

  1. Από τον υπολογιστή μας με hostname το dalvik, συνδεόμαστε σε έναν απομακρυσμένο Linux host με hostname το isafjordur. Η ταυτοποίηση του χρήστη γίνεται με βάση το public key authentication. Επειδή στον λογαριασμό μας στο dalvik το ιδιωτικό κλειδί SSH δεν προστατεύεται από passphrase, η σύνδεση στο isafjordur επιτυγχάνεται άμεσα και χωρίς να πληκτρολογήσουμε κάτι. (Παρεμπιπτόντως, χάρη στα SSH aliases ξεκινήσαμε τη σύνδεση στο isafjordur πληκτρολογώντας, απλά, ssh isafjordur.)
  2. Αργότερα, από το isafjordur θέλουμε να συνδεθούμε –πάντα μέσω SSH– σε ένα Raspberry Pi στο σπίτι, με hostname το nue. Και πάλι η ταυτοποίηση γίνεται με βάση το public key authentication, τώρα όμως το ιδιωτικό μας κλειδί στο isafjordur προστατεύεται με passphrase. Πριν λοιπόν γίνει έλεγχος για το αν επιτρέπεται η σύνδεση στο nue, μας ζητείται η πληκτρολόγηση του εν λόγω passphrase. Το δίνουμε κι όλα προχωρούν κανονικά.
  3. Μετά από λίγο αποσυνδεόμαστε από το nue. Σκεφτόμαστε ότι για το υπόλοιπο που θα μείνουμε συνδεδεμένοι στο isafjordur, δεν θα θέλαμε να πληκτρολογήσουμε ξανά το passphrase για το ιδιωτικό κλειδί που έχουμε εκεί. Πρέπει, λοιπόν, να το δώσουμε στον ssh-agent. Ένας *σωστός* τρόπος για να πετύχουμε το σκοπό μας είναι να πληκτρολογήσουμε
    sub0@ísafjörður:~> eval $(ssh-agent)
    

    και μετά

    sub0@ísafjörður:~> ssh-add
    

    Το γιατί τρέξαμε το ssh-agent μέσω του eval θα το δούμε σε λίγο. Προς το παρόν, ας σημειώσουμε ότι με τη βοήθεια του εργαλείου ssh-add πληκτρολογούμε το passphrase του ιδιωτικού μας κλειδιού κι ο ssh-agent το διαβάζει και το κρατά στη μνήμη, για όσο παραμένουμε συνδεδεμένοι στο τρέχον terminal session.

  4. Δείτε, τώρα, ότι συνδεόμαστε στο nue χωρίς πληκτρολόγηση passphrase…
  5. …και το ίδιο ισχύει και για συνδέσεις σε άλλα hosts, όπως είναι το vatnajokull, στα οποία έχουμε πρόσβαση μέσω SSH και με public key authentication.

Γιατί δεν τρέξαμε το ssh-agent απευθείας αλλά μέσω του eval; Η απάντηση είναι στο man page του ssh-agent. Με λίγα λόγια, αν ενεργοποιήσουμε το πρόγραμμα πληκτρολογώντας κάτι σαν ssh-agent bash, αρχικοποιούνται ορισμένες μεταβλητές περιβάλλοντος οι οποίες περνάνε σε ένα νέο κέλυφος BASH. Σ’ αυτό το νέο κέλυφος τρέχουμε το ssh-add, το πρόγραμμα εξετάζει τις τιμές των προαναφερθέντων μεταβλητών και χάρη σ’ αυτές μπορεί και δίνει το ιδιωτικό κλειδί στον ssh-agent. Εμείς όμως δεν θέλουμε να ξεκινήσουμε ένα νέο κέλυφος, το παρόν στο οποίο είμαστε συνδεδεμένοι μας κάνει μια χαρά. Ακριβώς γι’ αυτό τρέχουμε το ssh-agent μέσω του eval, το οποίο βλέπει τις νέες μεταβλητές που αρχικοποιεί το ssh-agent και τις διατηρεί στο παρόν session. Έτσι, το ssh-add δεν έχει κανένα πρόβλημα επικοινωνίας με το ssh-agent.

One Response to “Ενεργοποίηση του SSH agent σε terminal sessions”

  1. hlias | 31/03/2017 at 19:39

    Καλησπερα σας.
    Γιατι δεν χρησιμοποιειται ενα usb smat card (π.χ. safenet) για να αποθηκευεται εκει το ψηφιακο ποιστοποιητικο;οποτε ο κυνδινος κλοπης ειναι ελαχιστος,(κατι παρομοιο γινεται στα win)
    Υποστηρίζεται αυτό από linux;
    ΕΥΧΑΡΙΣΤΩ

Leave a Reply

You must be logged in to post a comment.

Σύνδεση

Αρχείο δημοσιεύσεων