Error - sudo: no tty present and no askpass program specified

Hi

I am trying to automate the deployment of a tar ball onto a set of remote servers and am getting this error from the ssh -

sudo: no tty present and no askpass program specified

What I have done is add some code into the user's ssh key that does a few things like delete the existing directory structure and untar the new one and so on.

It works fine from the command line, but I get this error when trying to embed the code in a script.

From the error it seems to be expecting a terminal session or an askpass program.

I don't really understand why I see this as the code is deployed and untarred ok???

At the moment, in the shh key I have -

no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="set -- ${SSH_ORIGINAL_COMMAND}; PSWD=$1; [[ $PSWD == welcome ]] || exit; [[ -f /tmp/muse.tar ]] || exit; NEWVERSION=$(tar xfO /tmp/muse.tar muse/lib/muse_version); [[ -n $NEWVERSION ]] || exit; OLDVERSION=;  [[ -f /usr/bin/muse/lib/muse_version ]] && OLDVERSION=$(cat /usr/bin/muse/lib/muse_version); [[ -n $OLDVERSION ]] && [[ $OLDVERSION -ge $NEWVERSION ]] && exit; [[ -d /usr/bin/muse ]] && sudo /bin/rm -rf /usr/bin/muse; sudo /bin/tar xvf /tmp/muse.tar -C /usr/bin && sudo /bin/chown -R musedeploy:muse_user /usr/bin/muse "

and in my sudoers.d file -

Cmnd_Alias MUSE_CMD = /bin/mv /tmp/muse.* muse.tar, /bin/rm -rf /usr/bin/muse,/bin/tar xvf /tmp/muse.tar -C /usr/bin,/bin/chown -R musedeploy\:muse_usr /usr/bin/muse
%musedeploy ALL = (root) NOPASSWD: MUSE_CMD

At the moment I am using the command -

ssh musedeploy@${SERVER} ${PSWD} || die "Deployment failed"

I could just not trap the error and dump stderr, but I'd rather understand what's going on if anyone can suggest anything.

Cheers

Steady

For the 'no tty present', open up your sudoers file and look for a line that says

Change it so the requiretty has the negate character in front. Make it look like

Notice the exclamation (negate) character in front of the requiretty

I'm confused by the code you are using
ssh musedeploy@${SERVER} ${PSWD} || die "Deployment failed"That looks like you are just trying to login to $SERVER as the user musedeploy and the failure is on the passwd. Does this account execute something on login?

Your sudo entry, is that on the $SERVER or is that on the local system? If you are wanting to execute the command on $SERVER then put the entry into the sudoers on $SERVER. You may want to setup passwd-less login for ssh as well.

With the !requiretty and the sudoers entry on $SERVER you could try your command as such:

ssh musedeploy@${SERVER} 'sudo $MUSE_CMD'

As you have NOPASSWD in the sudoers there is no need to worry about that.

The MUSE_CMD sudoers entry, is that suppose to be a single command or are they a string of separate commands? It appears you have multiple individual commands, they are not executing in succession. Is that what you are trying for?

Hi Raggmop

Thanks for the reply.

Actually I got it working and it turned out to be a bug in my code. Nothing to do with the tty at all.

Embedding code in the key is perfect for what I wanted to do but awful to parse for bugs etc as it all has to appear on one line. (Unless someone can show me otherwise).

This has been quite a learning curve. If you are ever looking for creative ways to screw up sudo and ssh, I'm your man!

And yes, I was trying to create a passwordless log in that was locked down to just running the code embedded in the key on the server.

Thanks for responding :slight_smile:

Steady