SSH και Απομακρυσμένη Διαχείριση στο Linux
Το SSH (Secure Shell) είναι πρωτόκολλο για ασφαλή απομακρυσμένη πρόσβαση και διαχείριση υπολογιστών μέσω δικτύου. Η επικοινωνία κρυπτογραφείται και μπορεί να χρησιμοποιηθεί για εκτέλεση εντολών, μεταφορά αρχείων και δημιουργία ασφαλών tunnels. Η συνηθισμένη θύρα είναι η TCP 22.
Εγκατάσταση OpenSSH Server
Σε Debian και Ubuntu εγκατάστησε τον OpenSSH Server και έλεγξε την υπηρεσία:
sudo apt update
sudo apt install openssh-server
sudo systemctl status ssh
sudo systemctl enable --now ssh
Σε ορισμένες διανομές η υπηρεσία ονομάζεται sshd αντί για ssh. Έλεγξε το όνομα της υπηρεσίας στη διανομή σου πριν εκτελέσεις εντολές διαχείρισης.
Σύνδεση σε απομακρυσμένο υπολογιστή
# Σύνδεση με username και IP ή hostname
ssh user@192.168.1.20
# Σύνδεση σε διαφορετική θύρα
ssh -p 2222 user@server.example.com
# Εκτέλεση μίας εντολής στον απομακρυσμένο server
ssh user@192.168.1.20 'hostnamectl'
Την πρώτη φορά που συνδέεσαι σε έναν server, το SSH εμφανίζει το host key fingerprint. Επιβεβαίωσέ το από αξιόπιστο κανάλι πριν αποδεχτείς το κλειδί. Μην αγνοείς προειδοποιήσεις για αλλαγή host key χωρίς να διερευνήσεις την αιτία.
Αυθεντικοποίηση με SSH keys
Η αυθεντικοποίηση με κλειδιά είναι προτιμότερη από την επαναλαμβανόμενη χρήση κωδικού. Δημιούργησε ένα ζεύγος Ed25519 και πρόσθεσε το δημόσιο κλειδί στον λογαριασμό του server:
# Δημιουργία κλειδιού
ssh-keygen -t ed25519 -C "user@device"
# Αντιγραφή δημόσιου κλειδιού στον server
ssh-copy-id user@192.168.1.20
# Προβολή του δημόσιου κλειδιού
cat ~/.ssh/id_ed25519.pub
Το ιδιωτικό κλειδί (id_ed25519) δεν πρέπει να κοινοποιείται ή να μεταφέρεται σε άλλους χρήστες. Προστάτεψέ το με passphrase και κατάλληλα δικαιώματα αρχείων:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
SSH Agent
Το ssh-agent κρατά προσωρινά διαθέσιμα τα ξεκλειδωμένα ιδιωτικά κλειδιά, ώστε να μη χρειάζεται να πληκτρολογείς συνεχώς το passphrase:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
ssh-add -l
Ρύθμιση SSH client με config
Μπορείς να αποθηκεύσεις συχνές ρυθμίσεις στο αρχείο ~/.ssh/config, ώστε να συνδέεσαι με ένα σύντομο alias:
Host myserver
HostName 192.168.1.20
User user
Port 22
IdentityFile ~/.ssh/id_ed25519
Μετά τη ρύθμιση, χρησιμοποίησε:
ssh myserver
Μεταφορά αρχείων με SCP και SFTP
Το SCP αντιγράφει αρχεία μέσω SSH, ενώ το SFTP προσφέρει διαδραστική διαχείριση αρχείων μέσω του SSH File Transfer Protocol.
# Αποστολή αρχείου στον server
scp ./file.txt user@192.168.1.20:/home/user/
# Λήψη αρχείου από τον server
scp user@192.168.1.20:/home/user/file.txt .
# Αντιγραφή φακέλου αναδρομικά
scp -r ./project user@192.168.1.20:/home/user/
# Διαδραστική σύνδεση SFTP
sftp user@192.168.1.20
Βασικές εντολές μέσα στο SFTP:
pwd
ls
cd /remote/path
get remote-file.txt
put local-file.txt
mkdir uploads
exit
Συγχρονισμός με rsync μέσω SSH
Το rsync μεταφέρει μόνο τις αλλαγές που χρειάζονται και είναι χρήσιμο για επαναλαμβανόμενο συγχρονισμό φακέλων:
# Συγχρονισμός τοπικού φακέλου προς server
rsync -avz ./project/ user@192.168.1.20:/home/user/project/
# Συγχρονισμός από server προς τοπικό φάκελο
rsync -avz user@192.168.1.20:/home/user/project/ ./project/
Πρόσεξε την τελική κάθετο (/) στην πηγή: επηρεάζει αν θα αντιγραφεί ο ίδιος ο φάκελος ή το περιεχόμενό του.
SSH Port Forwarding (Tunneling)
Το SSH μπορεί να δημιουργήσει κρυπτογραφημένα tunnels για πρόσβαση σε υπηρεσίες που δεν εκτίθενται απευθείας στο δίκτυο.
# Local forwarding: τοπική θύρα 8080 προς υπηρεσία στον server
ssh -L 8080:127.0.0.1:80 user@192.168.1.20
# Remote forwarding: προώθηση τοπικής υπηρεσίας προς τον server
ssh -R 9000:127.0.0.1:3000 user@192.168.1.20
# Dynamic forwarding: τοπικό SOCKS proxy
ssh -D 1080 user@192.168.1.20
Για το local forwarding, άνοιξε τοπικά το http://127.0.0.1:8080. Η πρόσβαση περνά μέσα από την SSH σύνδεση. Χρησιμοποίησε forwarding μόνο όταν έχεις άδεια πρόσβασης στην αντίστοιχη υπηρεσία.
Έλεγχος και αντιμετώπιση προβλημάτων
# Αναλυτική έξοδος για διάγνωση σύνδεσης
ssh -v user@192.168.1.20
# Έλεγχος αν η TCP 22 είναι προσβάσιμη
nc -vz 192.168.1.20 22
# Κατάσταση υπηρεσίας στον server
sudo systemctl status ssh
# Πρόσφατα logs σε συστήματα με systemd
sudo journalctl -u ssh -n 50 --no-pager
Αν η σύνδεση αποτυγχάνει, έλεγξε τη διεύθυνση και τη θύρα, αν εκτελείται ο SSH server, τους κανόνες firewall, τα δικαιώματα του καταλόγου ~/.ssh και αν το δημόσιο κλειδί έχει προστεθεί σωστά στο authorized_keys.
Βασικές πρακτικές ασφάλειας SSH
- Χρησιμοποίησε SSH keys με ισχυρό passphrase και προστάτευσε το ιδιωτικό κλειδί.
- Διατήρησε ενημερωμένο το OpenSSH client και server.
- Περιόρισε την πρόσβαση στη θύρα SSH με firewall ή VPN όπου είναι δυνατό.
- Απενεργοποίησε την απευθείας σύνδεση ως root και προτίμησε προσωπικούς λογαριασμούς με sudo.
- Απενεργοποίησε την αυθεντικοποίηση με password μόνο αφού επιβεβαιώσεις ότι λειτουργεί σωστά η πρόσβαση με κλειδί και έχεις εναλλακτική πρόσβαση διαχείρισης.
- Μην αλλάζεις ρυθμίσεις SSH χωρίς να ελέγχεις τη σύνταξη και να διατηρείς ενεργή μια υπάρχουσα συνεδρία μέχρι να επιβεβαιώσεις τη νέα σύνδεση.
Σχετικοί οδηγοί
SSH hardening για διαχειριστές Linux
Για server που εκτίθεται στο Internet, περιόρισε την πρόσβαση SSH σε απαραίτητους χρήστες και δίκτυα. Προτίμησε authentication με δημόσιο κλειδί, κράτησε ενημερωμένο το OpenSSH και έλεγξε τις ρυθμίσεις πριν κάνεις reload. Σε απομακρυσμένη σύνδεση διατήρησε ανοιχτή μια δεύτερη συνεδρία μέχρι να επιβεβαιώσεις ότι η νέα ρύθμιση λειτουργεί.
# Έλεγχος σύνταξης ρυθμίσεων sshd
sudo sshd -t
# Εμφάνιση ενεργών ρυθμίσεων
sudo sshd -T | less
# Έλεγχος κατάστασης υπηρεσίας
sudo systemctl status sshΟι ρυθμίσεις βρίσκονται συνήθως στο /etc/ssh/sshd_config και σε αρχεία /etc/ssh/sshd_config.d/. Η ακριβής υπηρεσία μπορεί να ονομάζεται ssh ή sshd, ανάλογα με τη διανομή.
SSH, SCP ή SFTP;
Το SSH παρέχει ασφαλή απομακρυσμένη πρόσβαση και tunneling. Το SCP αντιγράφει αρχεία μέσω SSH, ενώ το SFTP παρέχει διαδραστική μεταφορά και διαχείριση αρχείων. Για συγχρονισμό καταλόγων με επαναληπτική μεταφορά και δυνατότητα συνέχισης, το rsync μέσω SSH είναι συχνά καταλληλότερο.