Erro de ação do Nemo: sudo: no tty present e nenhum programa askpass especificado

0

Eu recebi o seguinte script para montar um compartilhamento na minha máquina:

#!/bin/bash
BA_LAST_OCTET=144
BA_IP=$(ip route get 8.8.8.8 | awk 'NR==1 {print $NF}' | awk -F'.' '{print $1,$2,$3"."}' OFS='.')$BA_LAST_OCTET
PROMPT="Sudo password: "

CAN_I_RUN_SUDO=$(sudo -n uptime 2>&1|grep "load"|wc -l)
if [ ${CAN_I_RUN_SUDO} -le 0 ]
then
    . getpass.sh $1 

    echo $PASSWORD | sudo -S : >/dev/null 2>&1
fi
OUTPUT=$(sudo mount.cifs //$BA_IP/huginn/ /mnt/huginn/ -o username=fileshare,password="",rw,file_mode=0777,dir_mode=0777 2>&1)
if [ -z "$OUTPUT" ]; then
    HUGINN="Huginn... Mounted."
else

    HUGINN="Huginn... Error.\n"$OUTPUT
fi
OUTPUT=$(sudo mount.cifs //$BA_IP/muninn/  /mnt/muninn/ -o username=fileshare,password="",rw,file_mode=0777,dir_mode=0777 2>&1)
if [ -z "$OUTPUT" ]; then
    MUNINN="Muninn... Mounted."
else

    MUNINN="Muninn... Error.\n"$OUTPUT
fi
MSG=$HUGINN"\n"$MUNINN"\nFinalized."
if [[ $1 == "--gui" ]] ; then
    zenity --info --title="Blackarmor" --text="$MSG"  2>/dev/null
else
    echo -e  "Mounting  Blackarmor shares... \n\n"$MSG
fi

Funciona perfeitamente na linha de comando. Mas se eu tentar usá-lo em um Nemo Action, mostrará a seguinte mensagem:

Huginn... Error.
sudo: no tty present and no askpass program specified
Muninn... Error.
sudo: no tty present and no askpass program specified
Finalized.

. getpass.sh apenas obtém uma senha de gui ou linha de comando e a coloca em PASSWORD var. Está funcionando bem, mesmo no Nemo Action (eu testei).

A ação do Nemo se parece com isso:

[Nemo Action]
Active=true
Name=Mount Blackarmor share
Exec=/bin/bash /usr/bin/ba --gui
Selection=Any
Extensions=any;

Alguém sabe como posso consertar isso?

Também aceito recomendações sobre como executar isso de uma maneira melhor. O mesmo problema acontece quando tento criar um lançador apontando para esse script na área de trabalho sem marcar a opção "Iniciar no terminal".

Editar

como @meuh sugeriu, tentei mudar isso:

. getpass.sh $1 

echo $PASSWORD | sudo -S : >/dev/null 2>&1

para isso:

 #. getpass.sh $1

 SUDO_ASKPASS=/usr/bin/ssh-askpass sudo -A : >/dev/null 2>&1

mas mostrou exatamente a mesma mensagem. O ssh-askpass é a versão do Ubuntu / Mint do x11-ssh-askpass (eu uso o Mint). Só para lembrar, funciona em um laucher se eu marcar "Launch in terminal". Mas eu realmente não gosto da grande janela que aparece atrás e também não funciona como uma ação do Nemo que seria preferível.

    
por Nelson Teixeira 09.04.2018 / 04:05

1 resposta

1

Em vez de escrever seu próprio comando password-getting, você pode pedir ao sudo para executar um já existente, como x11-ssh-askpass , que no meu sistema Fedora está em um pacote com o mesmo nome. Você diria

SUDO_ASKPASS=/usr/libexec/openssh/x11-ssh-askpass sudo -A somecommand

e irá aparecer uma gui para você digitar uma senha.

Como alternativa, você pode ser menos seguro e permitir que sudo execute um comando quando não houver tty editando o arquivo sudoers com sudo visudo /etc/sudoers (cuidado: mantenha um login raiz em algum lugar para salvá-lo, se necessário) e adicionando uma linha:

Defaults:myname !requiretty

para seu nome de usuário myname .

Se você precisa de um tty você pode usar um programa como script para fornecer um durante a execução do comando, por exemplo:

script <<<'SUDO_ASKPASS=/... sudo -A mycommand'

Você provavelmente precisaria cercar todo o seu script com script , ou receberia um novo tty a cada vez, e sudo pediria uma senha toda vez.

    
por 09.04.2018 / 21:47