I don't know what the deal is here…
So I want to run an applescript: sudo osascript myscript.scpt
This works fine in the terminal, but not when I execute it via PHP's exec()
; nothing happens. The console says
no tty present and no askpass program specified ; TTY=unknown ; …
I did my research, and it seems I'm missing the password for the sudo
command. I tried a couple different ways to get around this, including:
- writing
%admin ALL=(ALL) ALL
in/etc/sudoers
- and
proc_open()
instead ofexec()
none of which seem to be working, consequently driving me CrAzY!
So basically, is there a clear-cut way to get PHP to execute a simple terminal command?
EDIT: to clarify, myscript.scpt
is a simple appleScript that changes the onscreen UI (for a larger project). In theory, simply osascript myscript.scpt
should be enough, however the sudo
is for some reason necessary to invoke some response from the system. If the sudo
could be somehow eliminated, I don't think I would be having this permissions problem.
Run
sudo visudo
command then set-%sudo ALL=(ALL:ALL)
to%sudo ALL=(ALL:ALL) NOPASSWD: ALL
it will work.I recently published a project that allows PHP to obtain and interact with a real Bash shell. Get it here: https://github.com/merlinthemagic/MTS The shell has a pty (pseudo terminal device, same as you would have in i.e. a ssh session), and you can get the shell as root if desired. Not sure you need root to execute your script, but given you mention sudo it is likely.
After downloading you would simply use the following code:
I had a similar situation trying to
exec()
a backend command and also gettingno tty present and no askpass program specified
in the web server error log. Original (bad) code:A
bash
wrapper solved this issue, such as:Not sure if this will work in every case. Also, be sure to apply the appropriate quoting/escaping rules on
my_command
portion.It sounds like you need to set up passwordless sudo. Try:
Also comment out the following line (in /etc/sudoers via visudo), if it is there:
If anyone still requires this. You can write a plain text file, say ~./.sudopass/sudopass.secret, with the root password there. Let's say the root password is '12345'. You create ~./.sudopass/sudopass.secret with only '12345' as its content:
And then you do the following:
Remember to use this only in controlled environments.
php: the bash console is created, and it executes 1st script, which call sudo to the second one, see below:
/home/www/start.bash
myMount.bash:
oc, you want to run script from root level without root privileges, to do that create and modify the /etc/sudoers.d/mount file:
dont forget to chmod: