Προσπαθώ να μεταγλωττίσετε κάποιες πηγές χρησιμοποιώντας ένα 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 - και βγείτε χωρίς αποθήκευση με το πρώτο σημάδι οποιουδήποτε προβλήματος. Προειδοποίηση υγείας: η αλλοίωση αυτού του αρχείου θα έχει σοβαρές συνέπειες, επεξεργαστείτε με προσοχή!
Δοκιμάστε:
ssh -t remotehost "sudo <cmd>"
Αυτό θα αφαιρέσει τα παραπάνω σφάλματα.
Το sudo
από προεπιλογή θα διαβάσει τον κωδικό πρόσβασης από το συνημμένο τερματικό. Το πρόβλημά σας είναι ότι δεν υπάρχει συνδεδεμένο τερματικό όταν εκτελείται από την κονσόλα του netbeans. Οπότε πρέπει να χρησιμοποιήσετε έναν εναλλακτικό τρόπο για να εισάγετε τον κωδικό πρόσβασης: αυτός ονομάζεται πρόγραμμα askpass.
Το πρόγραμμα askpass δεν είναι ένα συγκεκριμένο πρόγραμμα, αλλά οποιοδήποτε πρόγραμμα που μπορεί να ζητήσει έναν κωδικό πρόσβασης. Για παράδειγμα, στο σύστημά μου το x11-ssh-askpass
λειτουργεί άψογα.
Για να γίνει αυτό πρέπει να καθορίσετε ποιο πρόγραμμα θα χρησιμοποιηθεί, είτε με τη μεταβλητή περιβάλλοντος SUDO_ASKPASS
είτε στο αρχείο sudo.conf
(δείτε man sudo
για λεπτομέρειες).
Μπορείτε να αναγκάσετε το sudo
να χρησιμοποιήσει το πρόγραμμα askpass χρησιμοποιώντας την επιλογή -A
. Από προεπιλογή θα το χρησιμοποιήσει μόνο αν δεν υπάρχει συνδεδεμένο τερματικό.