5 τρόποι για να συνεχίσετε να εκτελούνται οι απομακρυσμένες συνεδρίες και διεργασίες SSH μετά την αποσύνδεση


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

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

Μην χάσετε: 5 χρήσιμες πρακτικές για να διατηρήσετε τον διακομιστή SSH ασφαλή και προστατευμένο

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

Κατανοήστε τις διαδικασίες στο Linux

Κανονική διαδικασία

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

Ορφανή Διαδικασία

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

Διαδικασία Daemon

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

Τεχνικές για τη διατήρηση της λειτουργίας της συνεδρίας SSH μετά την αποσύνδεση

Μπορεί να υπάρχουν διάφοροι τρόποι για να αφήσετε τις συνεδρίες ssh να εκτελούνται μετά την αποσύνδεση, όπως περιγράφεται παρακάτω:

1. Χρήση της εντολής οθόνης για τη διατήρηση των περιόδων λειτουργίας SSH

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

Οι συνεδρίες οθόνης μπορούν να ξεκινήσουν και στη συνέχεια να αποσπαστούν από το τερματικό ελέγχου, αφήνοντάς τις να λειτουργούν στο παρασκήνιο και στη συνέχεια να συνεχιστούν ανά πάσα στιγμή και ακόμη και σε οποιοδήποτε μέρος. Απλώς πρέπει να ξεκινήσετε τη συνεδρία σας στην οθόνη και, όταν θέλετε, να την αποσυνδέσετε από το ψευδοτερματικό (ή το τερματικό ελέγχου) και να αποσυνδεθείτε. Όταν αισθάνεστε, μπορείτε να συνδεθείτε ξανά και να συνεχίσετε τη συνεδρία.

Έναρξη μιας περιόδου λειτουργίας οθόνης

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

screen

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

Αποσύνδεση οθόνης

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

Για να αποσυνδέσετε μια οθόνη από το απομακρυσμένο τερματικό, απλώς πατήστε “Ctrl+a ” και αμέσως μετά το “d ” και θα επιστρέψετε στο τερματικό βλέποντας το μήνυμα ότι η οθόνη αποσπάται. Τώρα μπορείτε να αποσυνδεθείτε με ασφάλεια και η συνεδρία σας θα παραμείνει ζωντανή.

Συνέχιση της συνεδρίας αποσπασμένης οθόνης

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

screen -r
screen -r <pid.tty.host>

Για να μάθετε περισσότερα σχετικά με την εντολή οθόνης και τον τρόπο χρήσης της, απλώς ακολουθήστε τον σύνδεσμο: Χρησιμοποιήστε την εντολή οθόνης για να διαχειριστείτε τις περιόδους σύνδεσης τερματικού Linux

2. Χρήση Tmux (Terminal Multiplexer) για να συνεχίσετε να εκτελούνται οι συνεδρίες SSH

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

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

Ξεκινήστε μια συνεδρία Tmux

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

tmux

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

Αποσυνδέστε τη συνεδρία Tmux από το τερματικό

Είτε μπορείτε να εκτελέσετε το “tmux detach ” κατά την εκτέλεση της περιόδου λειτουργίας tmux ή μπορείτε να χρησιμοποιήσετε τη συντόμευση (Ctrl+b και μετά d). Μετά από αυτό, η τρέχουσα συνεδρία σας θα αποσυνδεθεί και θα επιστρέψετε στο τερματικό σας από όπου μπορείτε να αποσυνδεθείτε με ασφάλεια.

tmux detach

Συνέχιση της κλειστής συνεδρίας Tmux

Για να ανοίξετε ξανά τη συνεδρία που αποσπάσατε και αφήσατε όπως είναι όταν αποσυνδεθήκατε από το σύστημα, απλώς συνδεθείτε ξανά στο απομακρυσμένο μηχάνημα και πληκτρολογήστε “tmux attach ” για να το προσαρτήσετε ξανά στην κλειστή περίοδο λειτουργίας και θα είναι ακόμα εκεί και θα τρέχει.

tmux attach

Για να μάθετε περισσότερα σχετικά με το tmux και πώς να το χρησιμοποιήσετε, απλώς ακολουθήστε τον σύνδεσμο: Χρησιμοποιήστε το Tmux Terminal Multiplexer για να διαχειριστείτε πολλαπλά τερματικά Linux.

3. Χρησιμοποιώντας την εντολή nohup για να συνεχίσετε να τρέχετε SSH Sessions

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

Με την εντολή nohup λέμε στη διαδικασία να αγνοήσει το σήμα SIGHUP το οποίο αποστέλλεται από τη συνεδρία ssh κατά τον τερματισμό, κάνοντας έτσι την εντολή να παραμείνει ακόμα και μετά την αποσύνδεση της συνεδρίας. Κατά την αποσύνδεση της περιόδου λειτουργίας, η εντολή αφαιρείται από το τερματικό ελέγχου και συνεχίζει να εκτελείται στο παρασκήνιο ως διαδικασία δαίμονα.

Εκτέλεση εντολής χρησιμοποιώντας nohup στο παρασκήνιο

Εδώ, είναι ένα απλό σενάριο όπου έχουμε εκτελέσει την εντολή find για αναζήτηση αρχείων στο παρασκήνιο σε περίοδο λειτουργίας ssh χρησιμοποιώντας nohup, μετά την οποία η εργασία στάλθηκε στο παρασκήνιο με την προτροπή να επιστρέφει αμέσως δίνοντας PID και εργασία Αναγνωριστικό της διαδικασίας ([JOBID] PID).

nohup find / -type f $gt; files_in_system.out 2>1 &

Συνέχιση της συνεδρίας για να δείτε εάν η εργασία εξακολουθεί να εκτελείται

Όταν συνδεθείτε ξανά, μπορείτε να ελέγξετε την κατάσταση της εντολής, να την επαναφέρετε στο προσκήνιο χρησιμοποιώντας 'fg %JOBID' για να παρακολουθείτε την πρόοδό της και ούτω καθεξής. Παρακάτω, η έξοδος δείχνει ότι η εργασία ολοκληρώθηκε καθώς δεν εμφανίζεται κατά την εκ νέου σύνδεση και έχει δώσει την έξοδο που εμφανίζεται.

fg %JOBID

4. Χρησιμοποιώντας την εντολή απενεργοποίησης για να συνεχίσετε να εκτελούνται οι συνεδρίες SSH

Ένας άλλος κομψός τρόπος για να αφήσετε την εντολή σας ή μια μεμονωμένη εργασία να εκτελείται στο παρασκήνιο και να παραμένει ζωντανή ακόμα και μετά την αποσύνδεση ή την αποσύνδεση της περιόδου σύνδεσης είναι η χρήση της απάρνησης.

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

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

Εκτέλεση εντολής χρησιμοποιώντας την απαγόρευση στο παρασκήνιο

Παρακάτω, στείλαμε την εντολή ping στο παρασκήνιο, έτσι ώστε το ut να συνεχίσει να εκτελείται και να αφαιρεθεί από τη λίστα εργασιών. Όπως φαίνεται, η εργασία τέθηκε αρχικά σε αναστολή, μετά την οποία ήταν ακόμα στη λίστα εργασιών ως Αναγνωριστικό διαδικασίας: 15368.

ping linux-console.net > pingout &
jobs -l
disown -h %1
ps -ef | grep ping

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

ps -ef | grep ping

5. Χρησιμοποιώντας την εντολή setsid για να εκτελούνται οι συνεδρίες SSH

Ένα άλλο βοηθητικό πρόγραμμα για την επίτευξη της απαιτούμενης συμπεριφοράς είναι το setsid. Το Nohup έχει ένα μειονέκτημα με την έννοια ότι η ομάδα διεργασιών της διαδικασίας παραμένει η ίδια, επομένως η διαδικασία που εκτελείται με το nohup είναι ευάλωτη σε οποιοδήποτε σήμα αποστέλλεται σε ολόκληρη την ομάδα διεργασιών (όπως Ctrl + C).

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

Εκτελέστε οποιαδήποτε εντολή χρησιμοποιώντας το setsid

Εδώ, δείχνει ότι η διαδικασία ‘sleep 10m’ έχει αποσπαστεί από το τερματικό ελέγχου, από τη στιγμή που δημιουργήθηκε.

setsid sleep 10m
ps -ef | grep sleep

Τώρα, όταν θα συνδέατε ξανά τη συνεδρία, θα εξακολουθείτε να βλέπετε αυτή τη διαδικασία να εκτελείται.

ps -ef | grep [s]leep

συμπέρασμα

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