Poskušam sestaviti nekaj virov z uporabo datoteke makefile. V makefile je nekaj ukazov, ki jih je treba zagnati kot sudo
.
Ko sestavljam vire iz terminala, gre vse v redu, make pa se ob prvem zagonu ukaza sudo
ustavi in čaka na geslo. Ko vnesem geslo, se make nadaljuje in zaključi.
Vendar bi rad imel možnost sestaviti vire v NetBeans. Tako sem začel projekt in Netbeansu pokazal, kje naj najde vire, toda ko ga sestavim, se pojavi napaka:
sudo: no tty present and no askpass program specified
Prvič naleti na ukaz sudo
.
To vprašanje sem poiskal na internetu in vse rešitve, ki sem jih našel, kažejo na eno stvar: onemogočanje gesla za tega uporabnika. Ker je zadevni uporabnik root. Tega ne želim storiti.
Ali obstaja kakšna druga rešitev?
Če uporabniku dovolite uporabo tega ukaza brez pozivanja k vpisu gesla, bo težava odpravljena. Najprej odprite konzolo lupine in vnesite:
sudo visudo
Nato uredite to datoteko in na sam konec dodajte:
username ALL = NOPASSWD: /fullpath/to/command, /fullpath/to/othercommand
npr.
john ALL = NOPASSWD: /sbin/poweroff, /sbin/start, /sbin/stop
bo uporabniku john
omogočil sudo poweroff
, start
in stop
, ne da bi ga pozval k vpisu gesla.
Na dnu zaslona poiščite tipke, ki jih morate uporabiti v programu visudo - mimogrede, to ni vi - in ga ob prvem znaku kakršne koli težave zapustite brez shranjevanja. Zdravstveno opozorilo: poškodovanje te datoteke bo imelo resne posledice, zato jo urejajte previdno!
Poskusite:
ssh -t remotehost "sudo <cmd>"
To bo odstranilo zgornje napake.
sudo
privzeto prebere geslo iz priloženega terminala. Vaša težava je, da pri zagonu iz konzole netbeans ni priključenega terminala. Zato morate za vnos gesla uporabiti alternativni način: ta se imenuje program askpass.
Program askpass ni poseben program, temveč kateri koli program, ki lahko zahteva geslo. V mojem sistemu na primer program x11-ssh-askpass
deluje dobro.
Za to morate določiti, kateri program naj se uporabi, bodisi z okoljsko spremenljivko SUDO_ASKPASS
bodisi v datoteki sudo.conf
(za podrobnosti glejte man sudo
).
Z možnostjo -A
lahko prisilite sudo
, da uporabi program askpass. Privzeto ga bo uporabil le, če ni priključenega terminala.