Επιδιόρθωση: Το ψευδο-τερματικό δεν θα εκχωρηθεί επειδή το stdin δεν είναι τερματικό

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

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

Μέθοδος 1: Αναγκαστική & απενεργοποίηση της ψευδο-κατανομής

Υπάρχει ένα ζευγάρι επιλογών γραμμής εντολών που μπορεί να επιλύσουν γρήγορα το πρόβλημα για εσάς. Δοκιμάστε το ssh -t -t -R ακολουθούμενο από τα υπόλοιπα όσα προσπαθούσατε να συνδεθείτε προκειμένου να επιβάλλετε ψευδο-τερματική κατανομή. Για παράδειγμα, ας υποθέσουμε ότι θα χρησιμοποιούσατε το ssh -p 80 [email protected] για να συνδεθείτε στον λογαριασμό σας στο example.com, το οποίο φυσικά είναι ανδρείκελο για τεκμηρίωση που δεν υπάρχει.

Δοκιμάστε να εκτελέσετε π.χ. ssh -t -t -R -p 80 [email protected] και δείτε εάν αυτό επιλύει το πρόβλημα. Φυσικά θα πρέπει να αντικαταστήσετε το όνομα με τον πραγματικό λογαριασμό και το όνομα κεντρικού υπολογιστή σας για να συνδεθείτε με επιτυχία στο σύστημα. Αυτό επιβάλλει την εκχώρηση ενός τερματικού, οπότε δεν θα πρέπει να δείτε ότι το ψευδο-τερματικό δεν θα εκχωρηθεί επειδή το stdin δεν είναι σφάλμα τερματικού.

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

Σίγουρα είναι απογοητευτικό, ωστόσο, χρησιμοποιήστε το Ctrl + C για να σκοτώσετε τη διαδικασία.

Μπορείτε να δοκιμάσετε είτε χρησιμοποιώντας έναν διακόπτη μόνο -t είτε αυξάνοντας τον αριθμό. Εάν αυτό δεν λειτουργεί, αντικαταστήστε τυχόν διακόπτες -t με διακόπτη -T στην εντολή, π.χ. ssh -T -R -p 80 [email protected] και δείτε αν αυτό λειτουργεί.

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

Δεδομένου ότι η εντολή ssh έδωσε σε αυτές τις δύο αντίθετες επιλογές παρόμοια ονόματα, θυμηθείτε ότι -t επιβάλλει την εκχώρηση ψευδο-τερματικών ενώ το -T απενεργοποιεί. Αυτές οι επιλογές είναι ευαίσθητες σε πεζά και είναι συχνά απαραίτητες από το εσωτερικό των σεναρίων, επειδή το ssh χρειάζεται ένα παραδοσιακό τερματικό TTY για να λειτουργήσει. Φυσικά, στην περίπτωσή σας θα χρησιμοποιείτε τον εξομοιωτή τερματικού για αυτόν τον σκοπό.

Μέθοδος 2: Χρήση του sshpass

Μερικά άτομα μπορεί να διαπιστώσουν ότι τα σενάρια τους λειτουργούν καλύτερα με την εντολή sshpass, η οποία δεν περιλαμβάνεται από προεπιλογή. Μπορείτε πάντα να το εγκαταστήσετε με το sudo apt-get install sshpass ή το sudo yum install sshpass εάν προτιμάτε να το δοκιμάσετε ή επειδή το χρειάζεστε για τη συγκεκριμένη περίπτωση χρήσης.

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

Για παράδειγμα, χρησιμοποιήστε τον κωδικό πρόσβασης sshpass -p ssh -T [email protected] για να αναγκάσετε το σύστημα να λειτουργήσει από το εσωτερικό του σεναρίου σας.

Μέθοδος 3: Διόρθωση σφαλμάτων διαχείρισης εργασίας

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

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

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

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

Ετικέτες Linux how-to ssh