Πώς να διορθώσετε το σφάλμα 'sudo: δεν υπάρχει tty και δεν έχει καθοριστεί πρόγραμμα askpass';

Προσπαθώ να μεταγλωττίσετε κάποιες πηγές χρησιμοποιώντας ένα makefile. Στο makefile υπάρχουν ένα σωρό εντολές που πρέπει να εκτελεστούν ως sudo.

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

Θα ήθελα όμως να μπορώ να μεταγλωττίζω τις πηγές στο NetBeans. Έτσι, ξεκίνησα ένα έργο και έδειξα στο netbeans πού να βρει τις πηγές, αλλά όταν μεταγλωττίζω το έργο δίνει το σφάλμα:

sudo: no tty present and no askpass program specified

Την πρώτη φορά που χτυπάει μια εντολή sudo.

Έψαξα το θέμα στο διαδίκτυο και όλες οι λύσεις που βρήκα δείχνουν ένα πράγμα: την απενεργοποίηση του κωδικού πρόσβασης για αυτόν τον χρήστη. Δεδομένου ότι ο εν λόγω χρήστης εδώ είναι ο root. Δεν θέλω να το κάνω αυτό.

Υπάρχει κάποια άλλη λύση;

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

sudo visudo

Στη συνέχεια, επεξεργαστείτε το αρχείο αυτό για να προσθέσετε στο τέλος:

username ALL = NOPASSWD: /fullpath/to/command, /fullpath/to/othercommand

π.χ.

john ALL = NOPASSWD: /sbin/poweroff, /sbin/start, /sbin/stop

θα επιτρέψει στον χρήστη john να κάνει sudo poweroff, start και stop χωρίς να του ζητηθεί κωδικός πρόσβασης.

Κοιτάξτε στο κάτω μέρος της οθόνης για τις πληκτρολογήσεις που πρέπει να χρησιμοποιήσετε στο visudo - παρεμπιπτόντως αυτό δεν είναι το vi - και βγείτε χωρίς αποθήκευση με το πρώτο σημάδι οποιουδήποτε προβλήματος. Προειδοποίηση υγείας: η αλλοίωση αυτού του αρχείου θα έχει σοβαρές συνέπειες, επεξεργαστείτε με προσοχή!

Σχόλια (8)

Δοκιμάστε:

ssh -t remotehost "sudo "

Αυτό θα αφαιρέσει τα παραπάνω σφάλματα.

Σχόλια (5)

Το sudo από προεπιλογή θα διαβάσει τον κωδικό πρόσβασης από το συνημμένο τερματικό. Το πρόβλημά σας είναι ότι δεν υπάρχει συνδεδεμένο τερματικό όταν εκτελείται από την κονσόλα του netbeans. Οπότε πρέπει να χρησιμοποιήσετε έναν εναλλακτικό τρόπο για να εισάγετε τον κωδικό πρόσβασης: αυτός ονομάζεται πρόγραμμα askpass.

Το πρόγραμμα askpass δεν είναι ένα συγκεκριμένο πρόγραμμα, αλλά οποιοδήποτε πρόγραμμα που μπορεί να ζητήσει έναν κωδικό πρόσβασης. Για παράδειγμα, στο σύστημά μου το x11-ssh-askpass λειτουργεί άψογα.

Για να γίνει αυτό πρέπει να καθορίσετε ποιο πρόγραμμα θα χρησιμοποιηθεί, είτε με τη μεταβλητή περιβάλλοντος SUDO_ASKPASS είτε στο αρχείο sudo.conf (δείτε man sudo για λεπτομέρειες).

Μπορείτε να αναγκάσετε το sudo να χρησιμοποιήσει το πρόγραμμα askpass χρησιμοποιώντας την επιλογή -A. Από προεπιλογή θα το χρησιμοποιήσει μόνο αν δεν υπάρχει συνδεδεμένο τερματικό.

Σχόλια (6)