How to fix 'sudo: no tty present and no askpass program specified' error?

前端 未结 26 1607
失恋的感觉
失恋的感觉 2020-11-22 03:36

I am trying to compile some sources using a makefile. In the makefile there is a bunch of commands that need to be ran as sudo.

When I compile the sour

相关标签:
26条回答
  • 2020-11-22 04:02

    If you add this line to your /etc/sudoers (via visudo) it will fix this problem without having to disable entering your password and when an alias for sudo -S won't work (scripts calling sudo):

    Defaults visiblepw
    

    Of course read the manual yourself to understand it, but I think for my use case of running in an LXD container via lxc exec instance -- /bin/bash its pretty safe since it isn't printing the password over a network.

    0 讨论(0)
  • 2020-11-22 04:03

    1 open /etc/sudoers

    type sudo vi /etc/sudoers. This will open your file in edit mode.

    2 Add/Modify linux user

    Look for the entry for Linux user. Modify as below if found or add a new line.

    <USERNAME> ALL=(ALL) NOPASSWD: ALL
    

    3 Save and Exit from edit mode

    0 讨论(0)
  • 2020-11-22 04:05

    sudo by default will read the password from the attached terminal. Your problem is that there is no terminal attached when it is run from the netbeans console. So you have to use an alternative way to enter the password: that is called the askpass program.

    The askpass program is not a particular program, but any program that can ask for a password. For example in my system x11-ssh-askpass works fine.

    In order to do that you have to specify what program to use, either with the environment variable SUDO_ASKPASS or in the sudo.conf file (see man sudo for details).

    You can force sudo to use the askpass program by using the option -A. By default it will use it only if there is not an attached terminal.

    0 讨论(0)
  • 2020-11-22 04:05

    This error may also arise when you are trying to run a terminal command (that requires root password) from some non-shell script, eg sudo ls (in backticks) from a Ruby program. In this case, you can use Expect utility (http://en.wikipedia.org/wiki/Expect) or its alternatives.
    For example, in Ruby to execute sudo ls without getting sudo: no tty present and no askpass program specified, you can run this:

    require 'ruby_expect'
    
    exp = RubyExpect::Expect.spawn('sudo ls', :debug => true)
    exp.procedure do
        each do
            expect "[sudo] password for _your_username_:" do
                send _your_password_
            end
        end
    end
    

    [this uses one of the alternatives to Expect TCL extension: ruby_expect gem].

    0 讨论(0)
  • 2020-11-22 04:05

    Using pipeline:

    echo your_pswd | sudo -S your_cmd
    

    Using here-document:

    sudo -S cmd <<eof
    pwd
    eof
    #remember to put the above two lines without "any" indentations.
    

    Open a terminal to ask password (whichever works):

    gnome-terminal -e "sudo cmd"
    
    xterm -e "sudo cmd"
    
    0 讨论(0)
  • 2020-11-22 04:06

    Maybe the question is unclear that why no answer was matching it but I had the same error message when I was trying to mount sshfs which required sudo : the command is something like this :

    sshfs -o sftp_server="/usr/bin/sudo /usr/lib/openssh/sftp-server" user@my.server.tld:/var/www /mnt/sshfs/www
    

    by adding the option -o debug

    sshfs -o debug -o sftp_server="/usr/bin/sudo /usr/lib/openssh/sftp-server" user@my.server.tld:/var/www /mnt/sshfs/www
    

    I had the same message of this question :

    sudo: no tty present and no askpass program specified
    

    So by reading others answer I became to make a file in /etc/sudoer.d/user on my.server.tld with :

    user ALL=NOPASSWD: /usr/lib/openssh/sftp-server
    

    and now I able to mount the drive without giving too much extra right to my user.

    0 讨论(0)
提交回复
热议问题