Απομακρυσμένη Πρόσβαση μέσω SSH με ΕΛ/ΛΑΚ λογισμικο
Γεια σας φίλοι και φίλες. Σε αυτό το άρθρο θα δούμε πως μπορουμε με ΕΛ/ΛΑΚ λογισμικο να παράσχουμε βοήθεια σε φίλους, συγγενείς, ή/και συνεργάτες και να έχουμε πρόσβαση σε συστηματα που δέν ειναι προσβάσιμα απο το Διαδίκτυο παρα μόνο απο το δίκτυο του σπιτιού μας ή της εταιρίας μας.
Πριν μπουμε για τα καλά στο θέμα μας, μια μεγάλη συγνώμη για το μέγεθος του αρθρου (που ίσως να ειναι λιγο πιο μεγάλο απο ότι θα επρεπε) και για τα ορθογραφικά λάθη, τις άτονες λέξεις και τις “πετσοκομενες”. Ελπίζω να βοηθήσει ολους όσους το διαβάσουν. Για οτιδήποτε ερωτήσεις στειλτε μου ένα μυνημα και θα σας απαντήσω μόλις το δώ.
Τί εννοούμε με τον όρο Απομακρυσμένη Πρόσβαση.
Οταν μιλάμε για απομακρυσμένη πρόσβαση σε εναν υπολογιστη συνήθως εννοούμε απομακρυσμένη πρόσβαση στην επιφάνεια εργασίας του υπολογιστή για τον οποίον μιλάμε.
Για παράδειγμα όταν θέλουμε να βοηθήσουμε μια θεία μας που έχει κατα λάθος σβήσει οικογενειακες φωτογραφιες ή δεν μπορει να εκτυπώση συνταγές που έχει βρει σε διάφορες ιστοσελίδες στο Διαδίκτυο.
Τι θα κανουμε (με απλά λόγια);
Αυτό που θα κάνουμε ειναι στην ουσία μια σύνδεση σε ένα άλλο σύστημα εκτώς του δικτύου μας, μεσω ενδιάμεσου διακομιστή. Και πως θα γίνει αυτό; Για να λυσω αυτη την απορεία σας θα πρέπει να σας γυρίσω λιγο πισω στα παλιά. Πολλά χρόνια πρίν, για να κάνετε ενα τηλεφώνημα έπρεπε να καλέσετε πρώτα το τηλεφωνικό κέντρο της περιοχής σας και να πείτε στον χειριστή ή την χειρίστρια του κέντρου να σας συνδέσει με το συνδρομητή που θέλετε να καλέσετε.
Ο χειριστής ή η χειρίστρια για να σας συνδέσει στον κατάλληλο συνδρομητή έπερνε ένα απο τα καλώδια στον κάτω μέρος του πινακά τους και το συνέδεε σε μια απο τις κάθετες υποδοχές που
αντιστοιχούσε στον κατάλληλο συνδρομητή. Επειτα Ο χειριστής ή η χειρίστρια καλούσε τον συνδρομητη που καλούσατε και μετά σας σύνδεε μεταξύ σας, βγαίνοντας πάντα απο την γραμμή.
Κάτι παρόμοιο θα γινει και στην δική μας περίπτωση. Ο/η συγγενής, φίλος/η, συνεργάτης/ηδα θα συνδεθει στον ενδιάμεσο διακομιστή και θα ανοίξει μια δίοδο για τα δεδομένα που χρειαζόμαστε να χρησιμοποιήσουμε για να τον βοηθήσουμε. Στην άλλη μεριά της επικοινωνιας, θα συνδεθούμε με τον ενδιαμεσο διακομιστή σε λιγο διαφορετικο σημειο και θα έχουμε πρόσβαση στο σύστημα στο οποίο θέλουμε να συνδεθούμε.
Για να ειναι επιτυχεις η σύνδεση η ροή των δεδομένων θα πρέπει απο τον καλούντα να αντιστραφεί για να μας επιτραπεί η πρόσβαση. Και αυτο γιατι οι δρομολογιτές που μας προμηθέυουν οι παροχοι του Internet έχουν εξ αρχης αυστηρους κανόνες για το τί δεδομένα επιτρέπεται να εινα προσβάσιμα μεσω του Internet απο την υπολογιστη μας και το δικτυο μας. Συν του οτι για να αλλάχθουν οι κανόνες αυτοι θα πρεπει αυτοι που θα τους αλλάξουν να ξέρουν τι κάνουν σε καθε περιπτωση.
Με τον ενδιάμεσο διακομιστή παρακάμπτουμε αυτους τους κανόνες και έτσι μπορούμε να συνδεθούμε στον υπολογιστη που θέλουμε να συνδεθούμε.
Μα καλά, το Teamviewer δεν κανει ακριβώς αυτό που περιγράφεις, και πιο εύκολα απο αυτή την λυση;
Ναι… ΑΛΛΆ… το Teamviewer έχει εσωτερικούς ελέγχους για το τί χρήση του κάνετε και αν το χρησιμοποιήσετε παρα πολλες φορές, θεωρεί οτι το χρησιμοποιήτε για επαγγελματική χρήση χωρίς την κατάλληλη άδεια χρήσης και σας κόβει την σύνδεση μετά απο μερικά λεπτά σαν παροτρυνση για την αγορά άδειας μας βγάζει ένα μύνημα για “Fair use” (δηλαδη και τίμια χρήση). Προσωπικά δέν έχω κανένα πρόβλημα με αυτό το μύνημα… εκτώς του ότι η συνδεσή μας κόβεται και μας βγάζει αυτο το μύνημα στην Free (στην χωρις χρέωση δηλαδη) έκδοση του προγράμματος. Αν ήταν δοκιμαστική έκδοση κανένα απολυτως θέμα και πρόβλημα… αλλα στην Free; Γιατι: (περισσότερα για αυτό το θέμα σε διαφορετικό άρθρο).
Πάμε να δούμε αν θα μας δουλέψει.
Ας πούμε οτι ο φίλος μας ο Νίκος θέλει να τον βοηθήσουμε με τον εκτυπωτή του. Στον υπολογιστή του έχει Windows 10. Εμείς στον δικό μας έχουμε Debian 9.9 και έχουμε στίσει ένα ενδιάμεσο διακομιστή στην DigitalOcean.
Στον Υπολογιστή του Νίκου θα χρειαστούμε:
- Το plink που είναι κομμάτι του γνωστού λογισμικού PuTTy
- Εναν VNC Server (πχ TightVNC Server ή RealVNC Server).
Στον δικό μας υπολογιστή θα χρειαστούμε:
- Εναν SSH Client (πχ openssh-client ή PuTTy για το Debian)
- Εναν VNC Viewer (πχ remmina ή κάποιο άλλο πρόγραμμα)
Τα … “μαγικά” μας
Αφου κάτσει ο Νίκος μπροστά απο τον υπολογιστή του και εγκαταστήσει και ριθμησει τα δυο αυτα προγράμματα, του ζητάμε να εκτελέσει την παρακάτω εντολή μέσω του Command Prompt στα Windows:
plink gnutechie.com -P 10101 -C -R *:5599:127.0.0.1:5900 -l gnutechie
Τι ακριβώς κάνει αυτή η εντολή; Στην παραπάνω γραμμή είπαμε στο σύστημα να:
- συνδεθεί στο διακομιστή gnutechie.com
- που “ακούει” στην TCP port 10101
- χρησιμοποιόντας το λογαριασμό: gnutechie
- χρησιμοποιόντας συμπίεση δεδομένον για την εκπομπη τους
- δημιουργόντας ενα “τουνελ” με αντίστροφη ροή στην TCP θύρα 5599 στον ενδιάμεσο διακομιστή που μεταφέρει δεδομένα απο την θύρα 5900 του υπολογιστη του Νικου.
Απο την δικία μας μεριά για να γίνει επιτυχεις η σύνδεση πρέπει να γράψουμε την εξής εντολή:
ssh -p10101 gnutechie@gnutechie.com -L 5900:localhost:5599
Αντίστοιχα η εντολή αυτή θα κάνει τα παρακάτω:
- θα συνδεθεί στον διακομιστή gnutechie.com
- που ακουει στην TCP θύρα 10101
- χρησιμοποιόντας τον λογαριασμό: gnutechie
- θα δημιουργησει ενα “τουνελ” μεταξύ της TCP θύρας 5599 στον ενδιάμεσο διακομιστή, και της TCP θύρας 5900 στον δικό μας υπολογιστή.
Η επόμενή μας κίνηση είναι να εκτελέσουμε ενα VNC Client προγραμμα και για διακομιστη να βάλουμε στον δικό μας υπολογιστη το localhost:5900 καθώς και το username και password που έχει ορίσει ο Νίκος για το VNC Server στον δικό του υπολογιστή, μιας και ολο το “τουνελ” ξεκινάει απο τον υπολογιστή του Νίκου και μέσω του ενδιάμεσου διαομιστή καταλήγει στον δικό μας υπολογιστη.
Αυτό ηταν. Τωρα είμαστε συνδεδεμενοι στον υπολογιστή του Νίκου και μπορούμε να τον βοηθήσουμε με το προβλημα που έχει με τον εκτυπωτή του.
Όλo αυτο ειναι πολυ περιπλοκο… προτιμαω το Teamviewer.
Συμφωνω… ειναι για εναν απλο χρήστη πιο περιπλοκο απο το Teamviewer. Μπορει όμως να δημιουργηθει ενα απλο προγραμματακι το οποιο να μπορει ο απλος χρήστης να κατεβασει και να κανει εγκατασταση και να διμιουργήσει με το plink αυτη την σύνδεση χωρίς να χρειαστει το Command prompt και να ξερει ο χρήστης ολα αυτά τα περιπλοκα… (βεβαια ειναι καλό να ξέρουμε τι γινεται “κατω απο το καπω” ). Επίσεις μπορει να δημιουργιθει ενα συστημα αυτοματης ανανεωσης κωδικων παρομοιο με αυτο του Teamviewer για να έχουμε ενα ακόμα οπλο κατα των παράνομων προσπαθειών πρόσβασης στο συστημα μας. Το ολο συστημα έχει περιθώρια βελτίωσης της ευχριστιας του. Ισως πανω σε αυτο να στηριχθει ενα δευτερο άρθρο
Συνήθεις Ερωταπαντήσεις (FAQ)
Ερώτηση: Μπορουμε εκτως απο το VNC να χρησιμοποιήσουμε καποιο άλλο προγραμμα διακομιστη (server)? πχ εναν διακομιστή ιστοσελίδων που τρέχει μια δοκιμαστικη εγκατασταση Wordpress ή εναν music player που έχει web-based περιβάλλον χωρις να είναι προσβάσιμο σε όλους απο το Internet παρα μόνο σε μας;
Απάντηση: Ναι αρκει στην θέση του VNC client προγραμματος να χρησιμοποιήσουμε εναν φυλλομετριτη (browser) και να αλλάξουμε τα νούμερα των TCP θυρών στις εντολες μας για να μπορέσει το “τουνελ” να δημιουργηθει με επιτυχια.
Ερώτηση: Τα δεδομένα που φεύγουν απο τον υπολογιστη του Νίκου και περνάνε μέσω του ενδιάμεσου ειναι ασφαλη; Αν θέλουμε να συνδέθει ο Νίκος απευθείας με μας τι γινεται σε αυτη την περίπτωση;
Απάντηση: Σε κάθε σύνδεση που κάνουμε στο Internet απο τον υπολογιστή μας υπάρχει η πιθανότητα να γίνει υποκλοπη με διάφορους τρόπους. Εαν ο ενδιάμεσος διακομιστης ειναι στην κατοχή μας και τον ελεγχό μας τότε ολα καλα… αν κακοβουλο λογισμικο εγκατασταθει απο καποιον στον ενδιαμεσο διακομιστη και δεν το παρουμε χαμπάρι η απαντηση στην παραπανω ερωτηση ειναι οτι σε αυτη την περίπτωση ακομα και με την κρυπτογράφηση που προσφέρει το προτόκολλο του SSH υπαρχει ο κινδυνος υποκλοπης. Αν θελουμε να εξαλλειψουμε τον ενδιάμεσο διακομιστη θα πρέπει ο υπολογιστης στον οποιον ο Νικος θα συνδεθει με το plink να έχει ανοιγμένη μια TCP θύρα για τον SSH Server για να μπορέσει να επιτυχει η συνδεση. Εν τοιαυτη περιπτωσει η ασφάλεια των ανταλασσόμενων δεδομένων ειναι πάντα υπόθεση και των δυο μερών της σύνδεσης (δηλαδη ειμαστε και οι δυο υπευθυνοι να κραταμε τα δεδομενα μας και τους υπολογιστες μας ασφαλεις και καθαρους απο ιους και κακοβουλα λογισμικα).