Ενότητα 2 · 2.1
Δημιουργία και χρήση κλειδιών SSH
Ενότητα 2: SSH και κλειδιά · Χρόνος ανάγνωσης: 10 λεπτά
Στόχος μαθήματος: Μετά από αυτό το μάθημα μπορείτε να δημιουργήσετε ένα ζεύγος κλειδιών, να τοποθετήσετε το δημόσιο κλειδί στον server σας, να συνδεθείτε χωρίς κωδικό πρόσβασης και να φυλάξετε το ιδιωτικό σας κλειδί έτσι ώστε ένας χαμένος φορητός υπολογιστής να μη γίνει καταστροφή.
Βασικές έννοιες: ζεύγος κλειδιών, δημόσιο κλειδί, ιδιωτικό κλειδί, ed25519, RSA, passphrase, ssh-agent, ssh-copy-id, authorized_keys, δικαιώματα 700 και 600, ένα κλειδί ανά συσκευή, κλειδί FIDO2
Γιατί τα κλειδιά είναι καλύτερα από τους κωδικούς πρόσβασης
Στο μάθημα 1.3 συνδεθήκατε με κωδικό πρόσβασης. Αυτό λειτουργεί, αλλά ένας server στο internet δέχεται από το πρώτο κιόλας λεπτό επισκέψεις από προγράμματα που προσπαθούν να μαντέψουν κωδικούς. Ρίξτε μια ματιά στο αρχείο καταγραφής ενός καινούργιου server:
root@web1:~# journalctl -u ssh --since "1 hour ago" | grep -c "Failed password"
214Εκατοντάδες απόπειρες την ώρα είναι κάτι φυσιολογικό. Ένας ισχυρός κωδικός τις σταματά, αλλά έχετε δημιουργήσει ένα αδύναμο σημείο που δεν χρειάζεστε. Με ένα κλειδί SSH το μάντεμα είναι άσκοπο: δεν υπάρχει τίποτα να μαντέψει κανείς που να βρίσκεται σε κάποια λίστα λέξεων.
Ένα κλειδί αποτελείται από δύο μέρη που ανήκουν μαζί, ένα ζεύγος κλειδιών:
- Το ιδιωτικό κλειδί μένει στον δικό σας υπολογιστή. Όποιος έχει αυτό το αρχείο (και γνωρίζει το passphrase) μπορεί να συνδεθεί. Μην το μοιραστείτε με κανέναν, ούτε με τον πάροχό σας ούτε με κάποιο helpdesk.
- Το δημόσιο κλειδί το δίνετε στον server. Μπορεί να το δει οποιοσδήποτε: δεν μπορεί κανείς να συνδεθεί με αυτό, μόνο να κάνει έλεγχο.
Κατά τη σύνδεση ο server δεν στέλνει κανέναν κωδικό μέσα από τη γραμμή. Ο υπολογιστής σας αποδεικνύει με μια υπογραφή ότι διαθέτει το ιδιωτικό κλειδί και ο server ελέγχει αυτή την υπογραφή με το δημόσιο κλειδί. Ακόμη κι αν κάποιος παρακολουθεί το δίκτυο, δεν βλέπει τίποτα που να μπορεί να ξαναχρησιμοποιήσει αργότερα.
Δημιουργία κλειδιού
Δημιουργείτε το κλειδί στον δικό σας υπολογιστή, όχι στον server. Στα Windows 10 και 11, στο macOS και στο Linux το ssh-keygen είναι ήδη εγκατεστημένο. Ανοίξτε το PowerShell ή το Terminal:
anna@laptop:~$ ssh-keygen -t ed25519 -C "anna@laptop 2026"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/anna/.ssh/id_ed25519):
Enter passphrase for "/home/anna/.ssh/id_ed25519" (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/anna/.ssh/id_ed25519
Your public key has been saved in /home/anna/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:q3J8vX0bT2kPz9mWc1nR4sLh7uYdE5aF6gBiC0oN2xQ anna@laptop 2026Τι συμβαίνει εδώ;
- Το
-t ed25519επιλέγει τον τύπο. Το Ed25519 είναι σύντομο, γρήγορο και ασφαλές, και από το OpenSSH 9.5 είναι επίσης ο προεπιλεγμένος τύπος αν δεν ορίσετε τίποτα. Αν πρέπει να εξυπηρετήσετε ένα παλιό σύστημα που δεν γνωρίζει το ed25519, χρησιμοποιήστε RSA με τουλάχιστον 3072 bits:ssh-keygen -t rsa -b 4096. Παλαιότεροι τύποι όπως το DSA έχουν αφαιρεθεί από το OpenSSH· μην τους χρησιμοποιείτε. - Το
-Cείναι απλώς ένα σχόλιο. Γράψτε κάτι από το οποίο θα καταλαβαίνετε αργότερα από ποια συσκευή είναι το κλειδί. Αυτό βοηθά πάρα πολύ όταν χρειαστεί να ανακαλέσετε ένα κλειδί. - Το passphrase κρυπτογραφεί το ιδιωτικό κλειδί στον δίσκο σας. Αν σας κλέψουν τον φορητό υπολογιστή, ο κλέφτης έχει ένα κρυπτογραφημένο αρχείο. Χωρίς passphrase έχει αμέσως πρόσβαση σε όλους τους servers σας.
Τώρα έχετε δύο αρχεία:
| Αρχείο | Τι είναι | Κοινοποίηση; |
|---|---|---|
~/.ssh/id_ed25519 | Ιδιωτικό κλειδί | Ποτέ |
~/.ssh/id_ed25519.pub | Δημόσιο κλειδί, μία γραμμή κειμένου | Ναι, στον server |
Στα Windows βρίσκονται στο C:\Users\anna\.ssh\. Το δημόσιο κλειδί είναι μία γραμμή που ξεκινά με ssh-ed25519:
anna@laptop:~$ cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHk2... anna@laptop 2026Τοποθέτηση του δημόσιου κλειδιού στον server
Ο server αναζητά δημόσια κλειδιά στο αρχείο ~/.ssh/authorized_keys του χρήστη με τον οποίο συνδέεστε. Κάθε γραμμή είναι ένα κλειδί. Υπάρχουν τρεις τρόποι να φτάσει εκεί το κλειδί σας:
1. Κατά την εγκατάσταση. Οι περισσότεροι πάροχοι έχουν, κατά τη δημιουργία ή την επανεγκατάσταση ενός VPS, ένα πεδίο για το δημόσιο κλειδί σας. Στο WebOké το πεδίο αυτό ονομάζεται «Κλειδί SSH» στην οθόνη του VPS· σε άλλους παρόχους λειτουργεί παρόμοια. Αυτός είναι ο καλύτερος τρόπος: έτσι δεν χρειάζεται ποτέ να είναι ενεργή η σύνδεση με κωδικό.
2. Με το ssh-copy-id (macOS και Linux), όσο η σύνδεση με κωδικό λειτουργεί ακόμη:
anna@laptop:~$ ssh-copy-id anna@192.0.2.10
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed
anna@192.0.2.10's password:
Number of key(s) added: 13. Χειροκίνητα, για παράδειγμα από τα Windows ή μέσω της console του παρόχου σας. Επικολλήστε τη γραμμή από το αρχείο σας .pub στο authorized_keys και ρυθμίστε σωστά τα δικαιώματα:
anna@web1:~$ mkdir -p ~/.ssh
anna@web1:~$ nano ~/.ssh/authorized_keys
anna@web1:~$ chmod 700 ~/.ssh
anna@web1:~$ chmod 600 ~/.ssh/authorized_keysΑυτά τα δικαιώματα δεν είναι λεπτομέρεια. Ο SSH server τα ελέγχει (η ρύθμιση StrictModes είναι ενεργή από προεπιλογή): αν άλλοι μπορούν να γράψουν στον φάκελό σας .ssh ή στον αρχικό σας φάκελο, αγνοεί τα κλειδιά σας. Τότε βλέπετε απλώς ξανά να σας ζητείται κωδικός, χωρίς σαφές μήνυμα σφάλματος. Πώς διαβάζετε τα δικαιώματα θα το μάθετε στο μάθημα 3.1.
Στη συνέχεια κάντε δοκιμή σε ένα νέο παράθυρο:
anna@laptop:~$ ssh anna@192.0.2.10
Enter passphrase for key '/home/anna/.ssh/id_ed25519':
anna@web1:~$Η ερώτηση έρχεται τώρα από τον δικό σας υπολογιστή (το passphrase του κλειδιού σας) και όχι πια από τον server.
ssh-agent: ξεκλείδωμα μία φορά
Το να πληκτρολογείτε κάθε φορά ένα passphrase είναι κουραστικό. Ο ssh-agent κρατά το ξεκλείδωτο κλειδί σας στη μνήμη όσο είστε συνδεδεμένοι στον υπολογιστή σας:
anna@laptop:~$ ssh-add ~/.ssh/id_ed25519
Enter passphrase for /home/anna/.ssh/id_ed25519:
Identity added: /home/anna/.ssh/id_ed25519 (anna@laptop 2026)
anna@laptop:~$ ssh-add -l
256 SHA256:q3J8vX0bT2kPz9mWc1nR4sLh7uYdE5aF6gBiC0oN2xQ anna@laptop 2026 (ED25519)Στο macOS ο agent συνδέεται με την Κλειδοθήκη (Keychain), στα Windows είναι η υπηρεσία «OpenSSH Authentication Agent» (την ενεργοποιείτε μία φορά στις Υπηρεσίες). Έτσι έχετε την ευκολία της σύνδεσης χωρίς κωδικό και παρ' όλα αυτά ένα κρυπτογραφημένο κλειδί στον δίσκο.
Προσοχή με το agent forwarding (ssh -A): με αυτό ο server στον οποίο συνδέεστε μπορεί να χρησιμοποιήσει τον δικό σας agent. Όποιος είναι root σε αυτόν τον server μπορεί τότε να συνεχίσει με το δικό σας κλειδί. Χρησιμοποιήστε το μόνο σε servers που εμπιστεύεστε απόλυτα ή χρησιμοποιήστε το ProxyJump (μάθημα 2.3).
Ένα κλειδί ανά συσκευή και γνώση του πού βρίσκεται το καθένα
Ένα συχνό λάθος: αντιγραφή ενός ιδιωτικού κλειδιού σε φορητό υπολογιστή, σταθερό υπολογιστή και κινητό. Αν χάσετε μία συσκευή, πρέπει να αντικαταστήσετε το κλειδί παντού και να ρυθμίσετε ξανά όλες τις συσκευές. Καλύτερα:
- δημιουργήστε σε κάθε συσκευή δικό της κλειδί, με ένα σαφές σχόλιο (
-C "anna@telefoon")· - βάλτε όλα τα δημόσια κλειδιά στο
authorized_keys, ένα ανά γραμμή· - αν χάσετε μια συσκευή, αφαιρέστε μόνο εκείνη τη μία γραμμή.
Ελέγχετε τακτικά ποια κλειδιά έχουν πρόσβαση:
anna@web1:~$ ssh-keygen -lf ~/.ssh/authorized_keys
256 SHA256:q3J8vX0bT2kPz9mWc1nR4sLh7uYdE5aF6gBiC0oN2xQ anna@laptop 2026 (ED25519)
256 SHA256:Zt5oP1yW8eQ3rK6sV0bN9mD2xA4cH7jL1uI5fG8tE3w anna@telefoon (ED25519)Αν υπάρχει κάποιο κλειδί που δεν αναγνωρίζετε, αυτό είναι σήμα κινδύνου (μάθημα 10.3). Οι εισβολείς συχνά βάζουν το δικό τους κλειδί στο authorized_keys για να επιστρέψουν αργότερα.
Ένα κλειδί υλικού (FIDO2, όπως ένα YubiKey) είναι επίσης επιλογή. Με το ssh-keygen -t ed25519-sk το μυστικό μέρος βρίσκεται πάνω στο ίδιο το κλειδί και πρέπει να το αγγίζετε σε κάθε χρήση. Ένα κλεμμένο αρχείο είναι τότε άχρηστο. Αυτό είναι ένα ωραίο επόμενο βήμα, αλλά δεν είναι απαραίτητο για να ξεκινήσετε.
Χάσατε το ιδιωτικό σας κλειδί;
Αν χάσετε το μοναδικό σας ιδιωτικό κλειδί και η σύνδεση με κωδικό είναι απενεργοποιημένη, δεν μπορείτε πλέον να μπείτε μέσω SSH. Γι' αυτό:
- βάζετε πάντα τουλάχιστον δύο κλειδιά στον server (για παράδειγμα φορητού και σταθερού υπολογιστή)·
- μάθετε πώς λειτουργεί η console του παρόχου σας (μάθημα 1.2). Εκεί συνδέεστε σαν να έχετε συνδέσει ένα πληκτρολόγιο στον server, και αυτό λειτουργεί και χωρίς SSH. Στο WebOké αυτό ονομάζεται Console στην οθόνη του VPS· άλλοι πάροχοι το ονομάζουν VNC console, web console ή console έκτακτης ανάγκης.
Σε AlmaLinux και Rocky Linux
Όλα όσα περιγράφει αυτό το μάθημα λειτουργούν με τον ίδιο τρόπο. Μια επιπλέον παγίδα: με ενεργό το SELinux, το ~/.ssh πρέπει να έχει τη σωστή ετικέτα ασφαλείας. Αν δημιουργήσατε ή αντιγράψατε τον φάκελο χειροκίνητα και το κλειδί σας αγνοείται, το restorecon -Rv ~/.ssh το διορθώνει.
Σύνοψη
- Ένα ζεύγος κλειδιών αποτελείται από ένα ιδιωτικό κλειδί (μένει σε εσάς) και ένα δημόσιο κλειδί (πηγαίνει στον server, στο
~/.ssh/authorized_keys). - Δημιουργήστε κλειδιά με το
ssh-keygen -t ed25519στον δικό σας υπολογιστή, με passphrase· χρησιμοποιήστε τον ssh-agent για ευκολία. - Τα δικαιώματα μετράνε:
~/.sshσε 700 καιauthorized_keysσε 600, αλλιώς ο server αγνοεί το κλειδί σας. - Ένα κλειδί ανά συσκευή, με σαφές σχόλιο, ώστε να μπορείτε να ανακαλέσετε ένα από αυτά.
- Φροντίστε για ένα δεύτερο κλειδί και γνωρίστε την console του παρόχου σας ως είσοδο έκτακτης ανάγκης.
Κουίζ
Άσκηση
Άσκηση O2.1: Δημιουργία και χρήση κλειδιού. Δημιουργήστε στον δικό σας υπολογιστή ένα κλειδί ed25519 με passphrase και σαφές σχόλιο, τοποθετήστε το στον server σας (μέσω του πεδίου του παρόχου σας, με το ssh-copy-id ή χειροκίνητα), ελέγξτε τα δικαιώματα και συνδεθείτε σε ένα νέο παράθυρο με το κλειδί. Στη συνέχεια συμπληρώστε το αποτύπωμα (fingerprint) του κλειδιού σας (από το ssh-keygen -lf ~/.ssh/id_ed25519.pub) και απαντήστε στις ερωτήσεις για το πού βρίσκεται το ιδιωτικό σας κλειδί και τι κάνετε αν το χάσετε. Το πρόγραμμα ελέγχει μόνο αν το αποτύπωμα έχει τη σωστή μορφή· τα υπόλοιπα τα κάνετε μόνοι σας.
Άσκηση O2.1: Δημιουργία και χρήση κλειδιού
Αυτή την άσκηση την κάνετε μόνοι σας: κανείς δεν την ελέγχει. Σημειώστε τι έχετε κάνει και επισημάνετε την άσκηση ως ολοκληρωμένη.
Το ιδιωτικό κλειδί παραμένει στη δική σας συσκευή, κρυπτογραφημένο με passphrase, όχι σε φάκελο cloud ή σε email. Σε περίπτωση κλοπής, αφαιρείτε τη γραμμή της συσκευής αυτής από το authorized_keys σε κάθε server και δημιουργείτε νέο κλειδί. Μην επικολλάτε ποτέ το ιδιωτικό σας κλειδί, ούτε εδώ.
Τα τικ και οι σημειώσεις σας παραμένουν μόνο σε αυτό το πρόγραμμα περιήγησης· δεν τα στέλνουμε πουθενά. Αν έχετε εγγραφεί, αποθηκεύουμε στο Τα μαθήματά μου μόνο ότι έχετε ολοκληρώσει την άσκηση.
Για περαιτέρω μελέτη
Τα βήματα σε αυτά τα άρθρα αφορούν την οθόνη του VPS και τα πάνελ του WebOké· σε άλλους παρόχους λειτουργεί παρόμοια.
- Σύνδεση στον VPS σας με SSH (και δημιουργία κλειδιού SSH)
- Εγχειρίδιο DirectAdmin 15.2: SSH Keys και σύνδεση μέσω SSH
- Δεν έχετε πλέον πρόσβαση στον VPS σας: τι κάνετε τώρα;
- Εγχειρίδιο του ssh-keygen: https://man.openbsd.org/ssh-keygen
- Σημειώσεις έκδοσης του OpenSSH 9.5 (ed25519 ως προεπιλογή): https://www.openssh.org/txt/release-9.5
