sudo: nessun tty presente e nessun programma askpass specificato


73

Quando si tenta di eseguire un file binario remoto utilizzando sudosulla casella remota:

ssh remotehost "sudo ./binary"

Vedo questo errore:

sudo: nessun tty presente e nessun programma askpass specificato

Come posso aggirare questo?

EDIT questo sicuramente non è un duplicato della domanda suggerita come tale. Le risposte sono completamente irrilevanti. In effetti, tali modifiche al file sudoers erano già state applicate all'host remoto.


Risposte:


78

Un modo semplice è specificare -t:

ssh -t remotehost "sudo ./binary"

Dalla pagina man:

Forza l'allocazione pseudo-tty. Questo può essere usato per eseguire programmi arbitrari basati su schermo su una macchina remota, il che può essere molto utile, ad esempio quando si implementano servizi di menu. Le opzioni multiple -t impongono l'allocazione di tty, anche se ssh non ha tty locale.

Non riesco a spiegare esattamente perché questo funzioni e potrebbe esserci un modo migliore. Mi piacerebbe saperlo se è così :)

@psusi spiega perché questo funziona in un commento qui sotto.


14
Funziona perché sudorichiede un tty per richiedere una password e quando si specificano i comandi su cui eseguire ssh, non ne assegna uno per impostazione predefinita poiché viene normalmente utilizzato per eseguire comandi non interattivi che possono trasferire dati binari, che possono inciampare in tty .
psusi,

@psusi Conosci la risposta a questa domanda correlata? unix.stackexchange.com/questions/110841
trusktr

C'è anche -tt, richiesto quando si passa il comando usando heredoc
Rufus,

26

Domanda:

Come posso aggirare questo?

sudo: no tty present and no askpass program specified

Risposta alternativa

In alternativa, prova:

sudo -S ./binary

Questo dirige sudo a leggere la password dall'input standard, stdin.

Scenari in cui questo aiuta

Negli ambienti chroot, queste altre risposte potrebbero non funzionare correttamente ... forse perché:

  1. Il conflitto / etc / shadow vs / etc / passwd non consente all'utente di immettere una password.
  2. In un ambiente con chroot, l'accesso a tty1 può essere un po 'glitch, e ctrl-alt f2 - a tty2 non è fattibile, perché è un tty dell'ambiente non chroot.

Ad esempio: installare / riparare manualmente Linux o il bootloader, usando un ambiente chroot (come Archlinux e arch-chroot).


Ottengo un sudo: ./binary: comando non trovato errore quando eseguo sudo -S ./binary, cosa dà?
Ajit Goel,

5

È necessario definire il terminale / l'applicazione che leggerà la password. Esistono due varianti:

  1. export SUDO_ASKPASS=/usr/libexec/openssh/ssh-askpass
  2. vim /etc/sudoers (Predefiniti visiblepw)

11
Non è meglio usare visudoinvece di vim /etc/sudoersper evitare potenzialmente il blocco della macchina a causa di un errore nella modifica?
Drew Noakes,

2

Non riesce, perché sudosta cercando di richiedere la password di root e non è stata allocata alcuna pseudo-tty.

Devi accedere come root o impostare le seguenti regole nel tuo /etc/sudoers (o:) sudo visudo:

# Members of the admin group may gain root privileges
%admin  ALL=(ALL) NOPASSWD:ALL

Quindi assicurati che il tuo utente appartenga al admingruppo (o wheel).


anche se questo non è vero (non viene fornita alcuna prova per questo, e gli utenti nel gruppo admin con quel codice in centos e sistemi Ubuntu continuano a ricevere l'errore), è un ottimo consiglio per remoting per creare gruppi e regole basati su quei gruppi per compiti intensificati
MrMesees

2

Puoi anche creare un file come "sudo_shutdown" in /etc/sudoers.d, con contenuto:

# Allow admins to shutdown without pass
%adm ALL=(ALL) NOPASSWD: /sbin/shutdown

Ciò consente agli utenti che fanno parte del gruppo adm di arrestarsi senza password.


3
Hai intenzione di modificarlo per includere "no tty present"
Elder Geek

2

Nel mio caso ho ricevuto questo errore perché non stavo specificando un comando che vorrei usare come root nei sudoers

Qualcosa di simile a

/etc/sudoers.d/myuser:

myuser ALL=(root) NOPASSWD: \
    /bin/ls -la

ha funzionato per me

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.