Απομακρυσμένη Πρόσβαση μέσω SSH με ΕΛ/ΛΑΚ λογισμικο

Απομακρυσμένη Πρόσβαση μέσω SSH με ΕΛ/ΛΑΚ λογισμικο

Γεια σας φίλοι και φίλες. Σε αυτό το άρθρο θα δούμε πως μπορουμε με ΕΛ/ΛΑΚ λογισμικο να παράσχουμε βοήθεια σε φίλους, συγγενείς, ή/και συνεργάτες και να έχουμε πρόσβαση σε συστηματα που δέν ειναι προσβάσιμα απο το Διαδίκτυο παρα μόνο απο το δίκτυο του σπιτιού μας ή της εταιρίας μας.

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

Τί εννοούμε με τον όρο Απομακρυσμένη Πρόσβαση.

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

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

Τι θα κανουμε (με απλά λόγια);

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

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

Πίνακας συνδιαλέξεων ενός παλιού τηλεφωνικου κέντρου

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

Για να ειναι επιτυχεις η σύνδεση η ροή των δεδομένων θα πρέπει απο τον καλούντα να αντιστραφεί για να μας επιτραπεί η πρόσβαση. Και αυτο γιατι οι δρομολογιτές που μας προμηθέυουν οι παροχοι του Internet έχουν εξ αρχης αυστηρους κανόνες για το τί δεδομένα επιτρέπεται να εινα προσβάσιμα μεσω του Internet απο την υπολογιστη μας και το δικτυο μας. Συν του οτι για να αλλάχθουν οι κανόνες αυτοι θα πρεπει αυτοι που θα τους αλλάξουν να ξέρουν τι κάνουν σε καθε περιπτωση.

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

Μα καλά, το Teamviewer δεν κανει ακριβώς αυτό που περιγράφεις, και πιο εύκολα απο αυτή την λυση;

Ναι… ΑΛΛΆ… το Teamviewer έχει εσωτερικούς ελέγχους για το τί χρήση του κάνετε και αν το χρησιμοποιήσετε παρα πολλες φορές, θεωρεί οτι το χρησιμοποιήτε για επαγγελματική χρήση χωρίς την κατάλληλη άδεια χρήσης και σας κόβει την σύνδεση μετά απο μερικά λεπτά σαν παροτρυνση για την αγορά άδειας μας βγάζει ένα μύνημα για “Fair use” (δηλαδη και τίμια χρήση). Προσωπικά δέν έχω κανένα πρόβλημα με αυτό το μύνημα… εκτώς του ότι η συνδεσή μας κόβεται και μας βγάζει αυτο το μύνημα στην Free (στην χωρις χρέωση δηλαδη) έκδοση του προγράμματος. Αν ήταν δοκιμαστική έκδοση κανένα απολυτως θέμα και πρόβλημα… αλλα στην Free; Γιατι: (περισσότερα για αυτό το θέμα σε διαφορετικό άρθρο).

Πάμε να δούμε αν θα μας δουλέψει.

Ας πούμε οτι ο φίλος μας ο Νίκος θέλει να τον βοηθήσουμε με τον εκτυπωτή του. Στον υπολογιστή του έχει Windows 10. Εμείς στον δικό μας έχουμε Debian 9.9 και έχουμε στίσει ένα ενδιάμεσο διακομιστή στην DigitalOcean.

Στον Υπολογιστή του Νίκου θα χρειαστούμε:

  1. Το plink που είναι κομμάτι του γνωστού λογισμικού PuTTy
  2. Εναν VNC Server (πχ TightVNC Server ή RealVNC Server).

Στον δικό μας υπολογιστή θα χρειαστούμε:

  1. Εναν SSH Client (πχ openssh-client ή PuTTy για το Debian)
  2. Εναν 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 για να μπορέσει να επιτυχει η συνδεση. Εν τοιαυτη περιπτωσει η ασφάλεια των ανταλασσόμενων δεδομένων ειναι πάντα υπόθεση και των δυο μερών της σύνδεσης (δηλαδη ειμαστε και οι δυο υπευθυνοι να κραταμε τα δεδομενα μας και τους υπολογιστες μας ασφαλεις και καθαρους απο ιους και κακοβουλα λογισμικα).

5 Likes

Δεν έχω λόγια :zipper_mouth_face:
Εκπληκτικό άρθρο!!!
Μπράβο!!!

Να σαι καλα. Σιγουρα παιρνει λιγο βελτίωση ακόμα. Ελπίζω να βοηθήσει τα παιδια που το διαβάζουν ή το διαβασαν ήδη.

1 Like

Πολύ ωραίο άρθρο.
Απ’ την άλλη όμως υπάρχει και το anydesk (σαν απλή λύση, αντί του Teamviewer).

1 Like

Σωστα, αλλα και παλι είσαι στο έλεος μιας εταιριας. Μετα το “κολπακι” (τρομαρα να τους ερθει) που μας έκανε το Teamviewer… προσωπικά φυσάω και το γιαουρτι αφου ο χυλος του Teamviewer με ζεμάτισε.

Υπαρχει και το NoMachine NX αλλα το μόνο κακό είναι οτι για να μπορέσει κάποιος να αφήσει αλλους να μπούν μέσα στον υπολογιστή τους θα πρέπει να ξέρουν να κάνουν port-forward (δηλαδή να ανοίξουν μια δίοδο) στην TCP θύρα 4000 για να μπορέσει κάποιος να μπει και να προσφέρει βοήθεια. Και δηστυχώς πολλοί χρήστες δεν γνωρίζουν πως γίνεται αυτο.

Το Debian έχει νομίζω ακόμα στα αποθετήρια του το Gitso που ειναι παρα πολυ απλο…

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

Αλλα και το Gitso να μην ειναι χρήσιμο, μπορεί να φτιαχτεί ενα παρόμοια απλό προγραμματακι που να καλλεί το plink και το SSH και να είναι και εύκολα ριθμήσιμο ετσί ώστε να μπορει κανείς να χρησιμοποιήσει, VNC, RDP, NoMachine NX ή οτι άλλη υπηρεσία θέλει ο χρήστης.

1 Like

Το πρόβλημα που πρέπει να λυθεί για να έχεις μια open source λύση σαν αυτή του teamviewer δεν είναι τεχνικό. Στην απομακρυσμένη πρόσβαση έχουμε πολύ καλύτερες λύσεις σε σχέση με τα Windows.

Το πρόβλημα είναι πως οι υπολογιστές μας δεν είναι συνδεμένοι στο Internet. Έχεις σύνδεση στο Internet αλλά αυτός που είναι συνδεμένος είναι ο ρούτερ σου, όχι ο υπολογιστής σου. Επίσης ακόμα και ο ρούτερ που είναι στο internet δεν έχει σταθερή διεύθυνση. Αυτό έχει να κάνει με το περιορισμένο των διευθύνσεων IP v4 και κανονικά θα έπρεπε να είχε λυθεί αν είχαμε κάνει την μετάβαση στην έκδοση 6.

Τα προβλήματα αυτά τα αντιμετωπίζεις με διάφορα κόλπα, όπως το dynamic dns και το port forwording, που όμως θέλουν τεχνικές γνώσεις, και δεν μπορεί να τα κάνει θεία σου στο χωριό.

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

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

Η αλήθεια είναι ότι δεν το ήξερα το NoMachine NX. Όσον αφορά το port forwading όμως, όσοι χρησιμοποιούν linux θεωρώ ότι είναι άνω του μετρίου χειριστές και γνώστες των υπολογιστών, οπότε και να μην ξέρουν από port forwarding με μια επίσκεψη σε sites όπως το portforward.com, θα το λύσουν το πρόβλημα τους…
Όπως και να χει και από το άρθρο και από την απάντηση σου κάτι μάθαμε! :slight_smile:
Keep walking!

Οντως το portforward.com θα λύσει το πρόβλημα… αλλα η συνεχης χρηση του port-forwarding μπορει να δημιουργησει σημεια επίθεσης του δικτύου του καθε χρήστη. Απο αυτη την αποψη η χρήση μιας λύσης τύπου Teamviewer ή παρόμοιας προσέγγισης, δεν δημιουργεί τετοια σημεια πρόσβασης και για τον απλό χρήστη (και πιθανον πελατη αν χρησιμοποιειται απο επαγγελματιες τεχνικους). Για το επίπεδο γνώσης του καθε χρήστη δεν θα προσπαθήσω να το μαντέψω… αλλα αν ειμουν απλος χρήστης καινουργιος στο Linux ή ακομα και στα Windows… θα το σκευτόμουνα διπλα και τριδιπλα να πειραξω κατι στον router μου μιας και δεν τον εστεισα εγω αλλα τεχνικος του παροχου μου.

Χαιρομαι ιδιαιτερα που μπορεσα να μεταδώσω την γνωση που εχω με τροπο κατανοητο. Να σαι καλα :slight_smile:

~/.ssh/authorized_keys
2 Likes

Γιατί λές ότι θα καταρρεύσει από τον πολύ κόσμο, λόγω σέρβερ να παρέχει αντίγραφα, ή υποστήριξης, ή κάτι άλλο που δεν σκέφτομαι; Απ’την στιγμή που ανακοινώθηκε η εξαγορά του github απ’τον φορέα του “κακού” γεμίσαμε git… σέρβερς.

Εκεί που νομίζω πάσχουν τα μικρά μη-εμπορικά πρότζεκτς είναι το θέμα των μάνουαλ. Άλλες φορές είναι μηδαμινό και απευθύνεται μόνο σε dev του ίδιου κλάδου, άλλες φορές είναι απλό μεν ως προς την λειτουργία του αλλά γιατί είναι σημαντικό και γιατί υπάρχει δεν το εξηγεί. Έτσι παρουσιάζεται μεγάλη ανάγκη για υποστήριξη που χρειάζεται ανθρώπινο δυναμικό. Εκεί αν δεν υπάρχει κοινότητα θα πρέπει να υπάρξουν “υπάλληλοι”.

Νομίζω τα έχεις κάνει λίγο σαλάτα στο κεφάλι σου, ή έχεις μπλέξει τα νήματα :thinking:

Το πρόβλημα που πρέπει να λυθεί αφορά τον πως δύο υπολογιστές που δεν ξέρει ό ένας τον άλλον και είναι πίσω από ενα NAT μπορούν να ανοίξουν ένα ασφαλές κανάλι μεταξύ τους.

Αυτό απαιτεί ένα τρίτο υπολογιστή που θα κλείσει το ραντεβού και θα τρέχει κάποιας μορφής STUN server. Ο υπολογιστής αυτός είναι το πρόβλημα, τουλάχιστον όσο είμαστε το IPv4.

Αυτό δεν έχει καμία απολύτως σχέση με το git :innocent:

Και για να μην μένουν ανακρίβειες, καταρχήν δεν γεμίσαμε με git servers. Το git είναι ένα DVCS, κάθε αντίγραφό είναι ισοδύναμο με τα άλλα και δεν υπάρχει κάποιος server, και απο όσο ξέρω δεν έχει γραφτεί και κανένας άλλος. Το ίδιο το git είναι ο server.

Αυτό που ίσως εννοείς είναι υπηρεσίες όπως το github που δίνουν μια web οπτική ενός αποθετηρίου. Και εκεί δεν είχαμε κανένα καινούργιο “server” μετά την εξαγορά. Για λόγους πολιτικής ασφάλειας, ήταν και είναι συνηθισμένο, να χρησιμοποιείς ιδιωτικούς σέρβερς. Τα σχετικά προγράμματα, εμπορικά, ανοικτού κώδικα, ή ελεύθερου λογισμικού υπήρχαν ήδη.

@obars6, νομιζω οτι ο @Talos αναδικνυει μια διαφορετική διασταση του θεματος απο οτι εσυ.

Και οι δυο εισαστε σωστοι.

Το γεγονος οτι υπαρχουν πολλοι git servers δεν ειναι κακο. Πρεπει βεβαια να γινει διαχωρισμος απο το git σαν DVCS στο οποίο για να δουλέψει σαν server χρειάζεται μόνο ενα port-forward για να μπορεσει να στειλει και να δεχτει δεδομενα απο αλλα git αποθετήρια, και τα web-based περιβάλλοντα που του δίνουν τα παραδοσιακα χαρακτηρηστικά ενώς web server με συγκεκριμένο σκοπο.

Και ναι για να στηθει ενα git server και το web-based περιβάλλον του απο τον οποιοδηποτε developer επαγγελματια ή ερασιτέχνη, πρέπει να υπαρχουν σωστα γραμμένα manuals. Το προβλημα με αυτο ειναι οτι για να γινει κατι τετοιο μονο απο μια πηγη (μιας και ολοι πια λιγο πολυ ξερουμε να κουτσοστισουμε εναν web server μπορουμε και να αναρτήσουμε οτι θελουμε χωρις επαληθευση) ειναι δυσκολο. Το Internet πια εχει δώσει ελευθερία εκφρασης αλλα με την ελευθερία το προβλημα των εξακριβωμενων και σωστα γραμμένων manuals εχει εκραγει.

Οσο για την διασταση του @Talos, δεν ειμαι πεπισμενος οτι το χρημα ειναι αυτο που χρειαζεται για ενα τετοιο project. Βεβαια δεν ειναι ασχημο το να βγαλεις χρηματα απο ΕΛ/ΛΑΚ αλλα θα πρεπει τα χρήματα που θα βγαλουμε να τα διαμοιραστουμε με όλα τα “κινητα μέρη” αυτης της μηχανης… πχ OpenSSH project, VNC project, nginx, nodejs, python ή οποιο αλλο ΕΛ/ΛΑΚ λογισμικό χρησιμοποιησουμε αν θελουμε να ειμαστε σωστοι και ενταξει. Πρεπει παντα να θυμόμαστε οτι στεκόμαστε στους ομους γιγάντων (και στις πλατες τους θα προσθετα εγω). Με την καθε μας συμμετοχή/συνδρομή σε ΕΛ/ΛΑΚ λογισμικο και projects γιγαντονομαστε και εμεις λιγο… αλλα ας το κρατησουμε στο μυαλο μας.

1 Like