Πώς να ρυθμίσετε κλειδιά SSH στο Ubuntu 16.04

Εισαγωγή

Το SSH, γνωστό και ως secure shell, είναι ένα κρυπτογραφημένο πρωτόκολλο που χρησιμοποιείται συνήθως για τη διαχείριση και την επικοινωνία με διακομιστές. Όταν εργάζεστε με έναν διακομιστή Ubuntu. Σε αυτό το σεμινάριο, η κύρια εστίαση είναι η ρύθμιση κλειδιών SSH για το Ubuntu 16.04. Τα κλειδιά SSH συνιστώνται για όλους τους χρήστες και παρέχουν έναν εύκολο και ασφαλή τρόπο σύνδεσης στον διακομιστή σας.

Βήμα 1 — Δημιουργήστε το ζεύγος κλειδιών RSA

Το πρώτο βήμα στη ρύθμιση των κλειδιών SSH είναι η δημιουργία ενός ζεύγους κλειδιών στον υπολογιστή-πελάτη (γενικά σε έναν υπολογιστή):


$ ssh-keygen

Για αρχή, το ssh-keygen θα δημιουργήσει ένα ζεύγος κλειδιών RSA 2048-bit, το οποίο θα είναι αρκετά ασφαλές για τις περισσότερες περιπτώσεις χρήσης.

Εναλλακτικά, μπορείτε προαιρετικά να εισαγάγετε τη σημαία -b 4096 για να δημιουργήσετε ένα μεγαλύτερο κλειδί 4096-bit.

Αφού εισαγάγετε την εντολή, θα πρέπει να μπορείτε να δείτε την ακόλουθη προτροπή:


Output

Enter file in which to save the key (/your_home/.ssh/id_rsa):

Πατήστε enter για να αποθηκεύσετε το ζεύγος κλειδιών στον υποκατάλογο .ssh/ στον αρχικό σας κατάλογο ή σε μια προσαρμοσμένη εναλλακτική διαδρομή.
Θα πρέπει να εμφανιστεί η ακόλουθη προτροπή:


Output

Enter passphrase ( leave empty for no passphrase):

Προαιρετικά, μπορείτε να εισαγάγετε μια ασφαλή φράση πρόσβασης, η οποία συνιστάται ιδιαίτερα. Μια φράση πρόσβασης προσθέτει ένα επιπλέον επίπεδο ασφάλειας για να αποτρέψει τη σύνδεση μη εξουσιοδοτημένων χρηστών. Για να μάθετε περισσότερα σχετικά με την ασφάλεια, συμβουλευτείτε το σεμινάριό μας σχετικά με τον τρόπο ρύθμισης παραμέτρων ελέγχου ταυτότητας βάσει κλειδιού SSH σε διακομιστή Linux.

Στη συνέχεια, θα πρέπει να δείτε την ακόλουθη έξοδο:

Output

Your identification has been saved in /your_home/.ssh/id_rsa.
Your public key has been saved in /your_home/.ssh/id_rsa.pub.
The key fingerprint is:
a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host
The key's randomart image is:
+--[ RSA 2048]----+
| ..o |
| E o= . |
| o. o |
| .. |
| ..S |
| o o. |
| =o.+. |
|. =++.. |
|o=++. |
+-----------------+

Θα πρέπει τώρα να έχετε ένα δημόσιο και ένα ιδιωτικό κλειδί που μπορείτε να χρησιμοποιήσετε για έλεγχο ταυτότητας. Το επόμενο βήμα στη διαδικασία είναι να τοποθετήσετε το δημόσιο κλειδί στον διακομιστή σας, ώστε να μπορείτε να χρησιμοποιήσετε έλεγχο ταυτότητας που βασίζεται σε κλειδί SSH για να συνδεθείτε.


Βήμα 2 — Αντιγραφή του δημόσιου κλειδιού στον διακομιστή Ubuntu


Ο πιο γρήγορος τρόπος για να αντιγράψετε το δημόσιο κλειδί σας στον κεντρικό υπολογιστή του Ubuntu είναι να χρησιμοποιήσετε ένα βοηθητικό πρόγραμμα που ονομάζεται ssh-copy-id. Αυτή η μέθοδος συνιστάται ιδιαίτερα εάν είναι διαθέσιμη. Εάν δεν έχετε διαθέσιμο το ssh-copy-id στον υπολογιστή-πελάτη σας, μπορείτε να χρησιμοποιήσετε μία από τις δύο εναλλακτικές μεθόδους που παρέχονται σε αυτήν την ενότητα (αντιγραφή μέσω SSH που βασίζεται σε κωδικό πρόσβασης ή χειροκίνητη αντιγραφή του κλειδιού).


Αντιγραφή δημόσιου κλειδιού χρησιμοποιώντας ssh-copy-id


Το εργαλείο ssh-copy-id περιλαμβάνεται από προεπιλογή σε πολλά λειτουργικά συστήματα, ενδέχεται να το έχετε διαθέσιμο στο τοπικό σας σύστημα. Για να λειτουργήσει, θα χρειαστεί να έχετε πρόσβαση SSH στον διακομιστή σας με κωδικό πρόσβασης.
Για να χρησιμοποιήσετε το βοηθητικό πρόγραμμα, πρέπει να καθορίσετε τον απομακρυσμένο κεντρικό υπολογιστή στον οποίο θέλετε να συνδεθείτε και απλώς να προσθέσετε τον λογαριασμό χρήστη στον οποίο έχετε πρόσβαση SSH με κωδικό πρόσβασης. Αυτός θα είναι ο λογαριασμός στον οποίο θα αντιγραφεί το δημόσιο κλειδί SSH σας.


Η σύνταξη είναι:


$ ssh-copy-id username@remote_host

Ενδέχεται να δείτε το ακόλουθο μήνυμα:


Output

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

Αυτό σημαίνει ότι ο τοπικός σας υπολογιστής δεν αναγνώρισε τον απομακρυσμένο κεντρικό υπολογιστή. Αυτό πιθανότατα θα συμβεί την πρώτη φορά που θα συνδεθείτε σε έναν νέο κεντρικό υπολογιστή. Πληκτρολογήστε "ναι" και πατήστε ENTER για να συνεχίσετε.


Στη συνέχεια, το βοηθητικό πρόγραμμα θα σαρώσει τον τοπικό σας λογαριασμό για το κλειδί id_rsa.pub που δημιουργήσαμε νωρίτερα. Όταν βρει το κλειδί, θα σας ζητήσει τον κωδικό πρόσβασης του λογαριασμού του απομακρυσμένου χρήστη:


Output

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
username@111.111.11.111's password:

Πληκτρολογήστε τον κωδικό πρόσβασης (σημειώστε ότι η πληκτρολόγησή σας δεν θα εμφανίζεται για λόγους ασφαλείας) και πατήστε ENTER. Το βοηθητικό πρόγραμμα θα συνδεθεί με τον λογαριασμό στον απομακρυσμένο κεντρικό υπολογιστή χρησιμοποιώντας τον κωδικό πρόσβασης που δώσατε. Στη συνέχεια, θα αντιγράψει τα περιεχόμενα του κλειδιού ~/.ssh/id_rsa.pub σε ένα αρχείο στον αρχικό κατάλογο ~/.ssh του απομακρυσμένου λογαριασμού που ονομάζεται authorized_keys.


Μετά από αυτό θα πρέπει να δείτε την ακόλουθη έξοδο:


Output

Number of key(s) added: 1

Logging into the machine, with: "ssh 'username@111.111.11.111'"
and check to make sure that only the key you wanted was added.

Σε αυτό το σημείο της διαδικασίας, το κλειδί id_rsa.pub έχει μεταφορτωθεί στον απομακρυσμένο λογαριασμό.

Αντιγραφή δημόσιου κλειδιού χρησιμοποιώντας SSH

Εάν δεν έχετε διαθέσιμο το ssh-copy-id, αλλά έχετε πρόσβαση SSH με κωδικό πρόσβασης σε έναν λογαριασμό στον διακομιστή σας, μπορείτε να ανεβάσετε τα κλειδιά σας χρησιμοποιώντας μια συμβατική μέθοδο SSH.

Μπορούμε να το κάνουμε αυτό χρησιμοποιώντας την εντολή cat για να διαβάσουμε τα περιεχόμενα του δημόσιου κλειδιού SSH στον τοπικό μας υπολογιστή και να τα μεταφέρουμε μέσω μιας σύνδεσης SSH στον απομακρυσμένο διακομιστή. Από την άλλη πλευρά, μπορούμε να βεβαιωθούμε ότι ο κατάλογος ~/.ssh υπάρχει στον λογαριασμό που χρησιμοποιούμε και στη συνέχεια να εξαγάγουμε το περιεχόμενο που μεταφέραμε σε ένα αρχείο που ονομάζεται authorized_keys μέσα σε αυτόν τον κατάλογο.

Θα χρησιμοποιήσουμε το σύμβολο ανακατεύθυνσης >> για να προσθέσουμε το περιεχόμενο αντί να το αντικαταστήσουμε. Αυτό θα μας επιτρέψει να προσθέσουμε κλειδιά χωρίς να καταστρέψουμε κλειδιά που έχουν προστεθεί προηγουμένως.

Η πλήρης εντολή μοιάζει με αυτό:

cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Ενδέχεται να δείτε το ακόλουθο μήνυμα:

Output

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

Αυτό σημαίνει ότι ο τοπικός σας υπολογιστής δεν αναγνωρίζει τον απομακρυσμένο κεντρικό υπολογιστή. Αυτό θα συμβεί την πρώτη φορά που θα συνδεθείτε σε έναν νέο κεντρικό υπολογιστή. Πληκτρολογήστε "ναι" και πατήστε ENTER για να συνεχίσετε.

Στη συνέχεια, θα σας ζητηθεί να εισαγάγετε τον κωδικό πρόσβασης του λογαριασμού απομακρυσμένου χρήστη:

Output

username@111.111.11.111's password:

Αφού εισαγάγετε τον κωδικό πρόσβασής σας, το περιεχόμενο του κλειδιού id_rsa.pub θα αντιγραφεί στο τέλος του αρχείου authorized_keys του λογαριασμού του απομακρυσμένου χρήστη. Συνεχίστε στο Βήμα 3 εάν αυτό ήταν επιτυχές.

Χειροκίνητη αντιγραφή δημόσιου κλειδιού

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

Θα προσαρτήσουμε χειροκίνητα το περιεχόμενο του αρχείου id_rsa.pub στο αρχείο ~/.ssh/authorized_keys στον απομακρυσμένο υπολογιστή σας.

Για να εμφανίσετε το περιεχόμενο του κλειδιού id_rsa.pub, πληκτρολογήστε τα εξής στον τοπικό σας υπολογιστή:


cat ~/.ssh/id_rsa.pub

Θα δείτε το περιεχόμενο του κλειδιού, το οποίο θα πρέπει να μοιάζει κάπως έτσι:


Output

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle
7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G
/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U
/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test

Αποκτήστε πρόσβαση στον απομακρυσμένο κεντρικό υπολογιστή σας χρησιμοποιώντας τη μέθοδο που έχετε διαθέσιμη.

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

mkdir -p ~/.ssh

Τώρα, μπορείτε να δημιουργήσετε ή να τροποποιήσετε το αρχείο authorized_keys μέσα σε αυτόν τον κατάλογο. Μπορείτε να προσθέσετε τα περιεχόμενα του αρχείου id_rsa.pub στο τέλος του αρχείου authorized_keys, δημιουργώντας το εάν είναι απαραίτητο, χρησιμοποιώντας αυτήν την εντολή:


Στην ακόλουθη εντολή, αντικαταστήστε την εντολή public_key_string με την έξοδο από την εντολή cat ~/.ssh/id_rsa.pub που εκτελέσατε στο τοπικό σας σύστημα. Πρέπει να ξεκινά με ssh-rsa AAAA....

echo public_key_string >> ~/.ssh/authorized_keys

Μπορούμε τώρα να προσπαθήσουμε να αποκτήσουμε πρόσβαση στον διακομιστή Ubuntu μας με έλεγχο ταυτότητας χωρίς κωδικό πρόσβασης.

Βήμα 3 — Έλεγχος ταυτότητας στον διακομιστή Ubuntu χρησιμοποιώντας κλειδιά SSH

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

Η βασική διαδικασία είναι η ίδια με την άλλη φορά που το χρησιμοποιήσαμε:

$ ssh username@remote_host

Αν αυτή είναι η πρώτη φορά που συνδέεστε σε αυτόν τον κεντρικό υπολογιστή (αν χρησιμοποιήσατε την τελευταία μέθοδο παραπάνω), ενδέχεται να δείτε κάτι σαν αυτό:

Output

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

Εάν συμβεί αυτό, σημαίνει ότι ο τοπικός σας υπολογιστής δεν αναγνωρίζει τον απομακρυσμένο κεντρικό υπολογιστή. Πληκτρολογήστε "ναι" και, στη συνέχεια, πατήστε ENTER για να συνεχίσετε.


Εάν δεν δώσατε κωδικό πρόσβασης για το ιδιωτικό σας κλειδί, θα συνδεθείτε αμέσως. Εάν δώσατε κωδικό πρόσβασης για το ιδιωτικό κλειδί κατά τη δημιουργία του κλειδιού, θα σας ζητηθεί να τον εισαγάγετε τώρα (σημειώστε ότι οι πληκτρολογήσεις σας δεν θα εμφανίζονται στην περίοδο λειτουργίας τερματικού για λόγους ασφαλείας). Μετά τον έλεγχο ταυτότητας, θα πρέπει να ανοίξει μια νέα περίοδος λειτουργίας κελύφους για εσάς με τον διαμορφωμένο λογαριασμό στον διακομιστή Ubuntu.


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


Βήμα 4 — Απενεργοποίηση ελέγχου ταυτότητας με κωδικό πρόσβασης στον διακομιστή σας

Εάν καταφέρατε να συνδεθείτε στον λογαριασμό σας χρησιμοποιώντας SSH χωρίς κωδικό πρόσβασης, έχετε ρυθμίσει με επιτυχία τον έλεγχο ταυτότητας που βασίζεται σε κλειδί SSH στον λογαριασμό σας. Ωστόσο, ο μηχανισμός ελέγχου ταυτότητας που βασίζεται σε κωδικό πρόσβασης εξακολουθεί να είναι ενεργός, πράγμα που σημαίνει ότι ο διακομιστής σας εξακολουθεί να είναι εκτεθειμένος σε επιθέσεις brute-force.


Πριν ολοκληρώσετε τα βήματα σε αυτήν την ενότητα, βεβαιωθείτε ότι έχετε ρυθμίσει τον έλεγχο ταυτότητας βάσει κλειδιού SSH για τον λογαριασμό root σε αυτόν τον διακομιστή ή, κατά προτίμηση, ότι έχετε ρυθμίσει τον έλεγχο ταυτότητας βάσει κλειδιού SSH για έναν λογαριασμό που δεν είναι root σε αυτόν τον διακομιστή με δικαιώματα sudo. Αυτό το βήμα θα κλειδώσει τις συνδέσεις που βασίζονται σε κωδικό πρόσβασης, επομένως είναι ζωτικής σημασίας να διασφαλίσετε ότι θα εξακολουθείτε να έχετε πρόσβαση διαχειριστή.


Μόλις επιβεβαιώσετε ότι ο απομακρυσμένος λογαριασμός σας έχει δικαιώματα διαχειριστή, συνδεθείτε στον απομακρυσμένο διακομιστή σας με κλειδιά SSH, είτε ως root είτε με έναν λογαριασμό με δικαιώματα sudo. Στη συνέχεια, ανοίξτε το αρχείο διαμόρφωσης του δαίμονα SSH:

sudo nano /etc/ssh/sshd_config

Μέσα στο αρχείο, αναζητήστε μια οδηγία που ονομάζεται PasswordAuthentication. Αυτή μπορεί να έχει σχολιαστεί. Αποσχολιάστε τη γραμμή και ορίστε την τιμή σε "όχι". Αυτό θα απενεργοποιήσει τη δυνατότητά σας να συνδέεστε μέσω SSH χρησιμοποιώντας κωδικούς πρόσβασης λογαριασμού:

/etc/ssh/sshd_config
...
PasswordAuthentication no
...

Αποθηκεύστε και κλείστε το αρχείο όταν τελειώσετε πατώντας CTRL + X, έπειτα Y για να επιβεβαιώσετε την αποθήκευση του αρχείου και τέλος ENTER για να τερματίσετε το nano. Για να εφαρμόσουμε αυτές τις αλλαγές, πρέπει να επανεκκινήσουμε την υπηρεσία sshd:


$ sudo systemctl restart ssh

Ως προφύλαξη, ανοίξτε ένα νέο παράθυρο τερματικού και ελέγξτε ότι η υπηρεσία SSH λειτουργεί σωστά πριν κλείσετε αυτήν την περίοδο λειτουργίας:

$ ssh username@remote_host

Μόλις επαληθεύσετε την υπηρεσία SSH σας, μπορείτε να κλείσετε με ασφάλεια όλες τις τρέχουσες συνεδρίες διακομιστή.


Το daemon SSH στον διακομιστή Ubuntu σας ανταποκρίνεται πλέον μόνο σε κλειδιά SSH. Ο έλεγχος ταυτότητας που βασίζεται σε κωδικό πρόσβασης απενεργοποιήθηκε με επιτυχία.


Σύναψη


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