Ενότητα 1 · 1.3
Η πρώτη σύνδεση SSH
Ενότητα 1: Ο πρώτος σας server · Χρόνος ανάγνωσης: 10 λεπτά
Στόχος μαθήματος: Μετά από αυτό το μάθημα μπορείτε να συνδεθείτε για πρώτη φορά με SSH στον server σας, να ελέγξετε το αποτύπωμα (fingerprint) του server πριν τον εμπιστευτείτε και να ξέρετε τι κάνετε όταν εμφανίζεται η προειδοποίηση ότι η ταυτότητα του server έχει αλλάξει.
Βασικές έννοιες: SSH, client και server, θύρα 22, banner έκδοσης, host key, αποτύπωμα (SHA256), known_hosts, trust on first use, "REMOTE HOST IDENTIFICATION HAS CHANGED", PowerShell και Terminal
Τι είναι το SSH
Το SSH (Secure Shell) είναι η κρυπτογραφημένη σύνδεση με την οποία διαχειρίζεστε έναν server από απόσταση. Πληκτρολογείτε στον δικό σας υπολογιστή και οι εντολές εκτελούνται στον server. Ό,τι περνά από τη γραμμή, ακόμη και ο κωδικός πρόσβασής σας, είναι κρυπτογραφημένο.
Υπάρχουν δύο πλευρές:
- ο SSH client στον δικό σας υπολογιστή: το πρόγραμμα
ssh. Στο macOS και στο Linux περιλαμβάνεται από προεπιλογή. Στα Windows 10 (από την έκδοση 1809) και στα Windows 11 ο OpenSSH client είναι μέρος των Windows· τον χρησιμοποιείτε στο PowerShell ή στο Windows Terminal. Αν λείπει, τον προσθέτετε από τις Ρυθμίσεις, Προαιρετικές δυνατότητες, "Πρόγραμμα-πελάτης OpenSSH". Προγράμματα με παράθυρα όπως το PuTTY λειτουργούν επίσης, αλλά σε αυτή τη σειρά μαθημάτων χρησιμοποιούμε τοssh. - ο SSH server στο VPS: το πρόγραμμα
sshd(του OpenSSH). Από προεπιλογή ακούει στη θύρα 22.
Σύνδεση
Συνδέεστε με ένα όνομα χρήστη και τη διεύθυνση του server:
PS C:\Users\anna> ssh root@192.0.2.10Ή με ένα όνομα, αν το έχετε καταχωρίσει στο DNS (μάθημα 7.1):
anna@laptop:~$ ssh root@web1.example.comΤην πρώτη φορά βλέπετε κάτι σαν αυτό:
The authenticity of host '192.0.2.10 (192.0.2.10)' can't be established.
ED25519 key fingerprint is SHA256:Xq3aTnPpC0m1o4cJ2kVqY8mWb7rZs5dLfE6hUyN9tKs.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?Αυτή είναι η πιο σημαντική στιγμή του μαθήματος. Μην πληκτρολογήσετε στα τυφλά yes.
Το host key και το αποτύπωμα
Κάθε SSH server έχει ένα ή περισσότερα host keys: ζεύγη κλειδιών με τα οποία ο server αποδεικνύει ποιος είναι. Τα δημόσια μέρη βρίσκονται στον server στο /etc/ssh/, για παράδειγμα /etc/ssh/ssh_host_ed25519_key.pub. Σε κάθε σύνδεση ο server δείχνει ότι διαθέτει το μυστικό μέρος.
Ένα αποτύπωμα (fingerprint) είναι μια σύντομη σύνοψη (ένα hash) ενός τέτοιου δημόσιου κλειδιού. Το OpenSSH εμφανίζει από προεπιλογή τη μορφή SHA256: SHA256: ακολουθούμενο από 43 χαρακτήρες.
Η ερώτηση "Are you sure you want to continue connecting?" σημαίνει: ο υπολογιστής σας δεν γνωρίζει ακόμη αυτόν τον server. Ποιος εγγυάται ότι μιλάτε με το δικό σας VPS και όχι με κάποιον που υποκλέπτει την κίνηση; Κανείς, εκτός αν συγκρίνετε εσείς το αποτύπωμα με μια αξιόπιστη πηγή.
Αυτή η πηγή είναι η κονσόλα του παρόχου σας (μάθημα 1.2). Εκεί δεν επικοινωνείτε με τον server μέσω του δικτύου. Συνδεθείτε στην κονσόλα και ζητήστε το αποτύπωμα:
root@web1:~# ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
256 SHA256:Xq3aTnPpC0m1o4cJ2kVqY8mWb7rZs5dLfE6hUyN9tKs root@web1 (ED25519)Αν ταιριάζει ακριβώς με αυτό που δείχνει ο client, πληκτρολογείτε yes. Μπορείτε επίσης να επικολλήσετε το ίδιο το αποτύπωμα αντί για yes· τότε το ssh κάνει τη σύγκριση για εσάς. Αν διαφέρει, σταματήστε και ερευνήστε γιατί (λάθος διεύθυνση IP, επανεγκατάσταση του server ή κάτι σοβαρότερο).
Προσέξτε τον τύπο: ο client αναφέρει τον τύπο (ED25519, ECDSA ή RSA). Συγκρίνετε το αποτύπωμα του ίδιου τύπου. Πολλά images εμφανίζουν τα αποτυπώματα και στην κονσόλα κατά την πρώτη εκκίνηση (cloud-init), ανάμεσα σε γραμμές όπως BEGIN SSH HOST KEY FINGERPRINTS.
known_hosts και trust on first use
Αν πληκτρολογήσετε yes, βλέπετε:
Warning: Permanently added '192.0.2.10' (ED25519) to the list of known hosts.Ο client αποθηκεύει το κλειδί στο ~/.ssh/known_hosts (στα Windows C:\Users\<naam>\.ssh\known_hosts). Από εδώ και πέρα κάνει αυτόματα τη σύγκριση σε κάθε σύνδεση. Αυτό το μοντέλο ονομάζεται trust on first use (TOFU): την πρώτη φορά πρέπει να κάνετε τον έλεγχο εσείς, μετά τον αναλαμβάνει ο client.
Γι' αυτό ο πρώτος έλεγχος είναι τόσο σημαντικός: αν εμπιστευτείτε λάθος κλειδί, ο client δεν θα σας προειδοποιήσει ποτέ ξανά.
Αν εργάζεστε σε υπολογιστή με Debian ή Ubuntu, τα ονόματα στο known_hosts αποθηκεύονται από προεπιλογή ως hash (HashKnownHosts yes στο /etc/ssh/ssh_config), οπότε δεν βλέπετε εκεί αναγνώσιμες διευθύνσεις IP. Στα Windows και στο macOS είναι αναγνώσιμες. Η αναζήτηση λειτουργεί παντού με:
anna@laptop:~$ ssh-keygen -F 192.0.2.10
# Host 192.0.2.10 found: line 3
|1|kP9...= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA..."REMOTE HOST IDENTIFICATION HAS CHANGED"
Μερικές φορές βλέπετε αυτή την προειδοποίηση:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
...
Host key verification failed.Ο server δείχνει διαφορετικό κλειδί από αυτό που γνωρίζει ο client σας. Τότε το ssh αρνείται να συνδεθεί. Υπάρχουν δύο είδη αιτιών:
| Φυσιολογικό | Ύποπτο |
|---|---|
| Κάνατε επανεγκατάσταση του VPS (νέα host keys) | Δεν αλλάξατε τίποτα και όμως το κλειδί είναι διαφορετικό |
| Η διεύθυνση IP δόθηκε σε άλλον server | Είστε συνδεδεμένοι σε ένα άγνωστο δίκτυο wifi |
| Αντικαταστήσατε συνειδητά τα host keys | Το αποτύπωμα στην κονσόλα διαφέρει από αυτό που βλέπει τώρα ο client |
Αν υπάρχει φυσιολογική εξήγηση, ελέγξτε ξανά το αποτύπωμα στην κονσόλα και μόνο μετά διαγράψτε την παλιά γραμμή:
anna@laptop:~$ ssh-keygen -R 192.0.2.10
# Host 192.0.2.10 found: line 3
/home/anna/.ssh/known_hosts updated.Στην επόμενη σύνδεση εμφανίζεται ξανά η ερώτηση της πρώτης φοράς και κάνετε ξανά τον έλεγχο. Μην ορίσετε ποτέ StrictHostKeyChecking no στις ρυθμίσεις σας για να εξαφανίσετε την προειδοποίηση: έτσι απενεργοποιείτε ακριβώς την προστασία που μετράει.
Το banner έκδοσης
Πριν κρυπτογραφηθεί οτιδήποτε, ο client και ο server στέλνουν ο ένας στον άλλον μια γραμμή κειμένου: το banner έκδοσης. Είναι ορατό σε όλους στο internet. Το βλέπετε με ssh -v:
anna@laptop:~$ ssh -v root@192.0.2.10 2>&1 | grep "remote software"
debug1: Remote protocol version 2.0, remote software version OpenSSH_9.6p1 Ubuntu-3ubuntu13.5Εδώ ο server λέει ποιο πρωτόκολλο (2.0) και ποιο λογισμικό χρησιμοποιεί. Το Debian και το Ubuntu προσθέτουν την έκδοση του πακέτου. Αυτό δεν είναι μυστικό που πρέπει να κρύψετε: οι επιτιθέμενοι δοκιμάζουν έτσι κι αλλιώς τα πάντα, και προστατεύεστε με ενημερώσεις (ενότητα 4), όχι με διαφορετικό banner. Είναι όμως χρήσιμο: από το banner βλέπετε από έξω αν ο server σας εκτελεί πράγματι την ενημερωμένη έκδοση.
Στο AlmaLinux και στο Rocky Linux
Η σύνδεση και τα αποτυπώματα λειτουργούν με τον ίδιο τρόπο. Η υπηρεσία ονομάζεται sshd αντί για ssh (systemctl status sshd). Το banner δεν περιέχει όνομα διανομής, μόνο την έκδοση του OpenSSH.
Σύνοψη
- Το SSH είναι η κρυπτογραφημένη σύνδεση προς τον server σας· το
sshείναι ο client και τοsshdο server στη θύρα 22. - Στην πρώτη σύνδεση ο client δείχνει το αποτύπωμα του host key. Συγκρίνετέ το με την έξοδο του
ssh-keygen -lfστην κονσόλα πριν πληκτρολογήσετεyes. - Ο client αποθηκεύει το κλειδί στο
~/.ssh/known_hostsκαι στο εξής προειδοποιεί μόνος του (trust on first use). - Το "REMOTE HOST IDENTIFICATION HAS CHANGED" είναι φυσιολογικό μετά από επανεγκατάσταση· διαφορετικά είναι ύποπτο. Διαγράψτε μια παλιά γραμμή μόνο μετά από έλεγχο, με
ssh-keygen -R. - Το banner έκδοσης είναι δημόσιο· η προστασία προέρχεται από τις ενημερώσεις, όχι από την απόκρυψη.
Κουίζ
Άσκηση
Άσκηση Z1.3: SSH banner και αποτύπωμα (fingerprint) του server σας. Συμπληρώστε τη διεύθυνση του server σας, την έκδοση λογισμικού από το banner (όπως OpenSSH_9.6p1) και το αποτύπωμα ED25519 που ζητήσατε στην κονσόλα με ssh-keygen -lf. Το πρόγραμμα κάνει μία σύνδεση στη θύρα SSH σας, διαβάζει το banner και το host key και κάνει τη σύγκριση. Δεν συνδέεται ως χρήστης.
Για περαιτέρω μελέτη
- Σύνδεση στο VPS σας με SSH (και δημιουργία κλειδιού SSH)
- Δεν έχετε πια πρόσβαση στο VPS σας: τι κάνετε;
- ssh-keygen(1), επιλογές -l, -F και -R: https://manpages.debian.org/trixie/openssh-client/ssh-keygen.1.en.html
- ssh_config(5), StrictHostKeyChecking, FingerprintHash και HashKnownHosts: https://manpages.debian.org/trixie/openssh-client/ssh_config.5.en.html
- RFC 4253, παράγραφος 4.2 (το banner έκδοσης): https://www.rfc-editor.org/rfc/rfc4253.html
