Sempre use sudo askpass exceto quando chamado de um shell interativo

1

Eu vi a pergunta existente sobre isso, mas o A resposta especifica apenas o uso de um alias, o que estragaria o shell interativo e não funcionaria para aplicativos usando exec () ou meios similares. Eu realmente não quero mover o executável sudo em / usr / bin porque isso tornaria a atualização difícil, mas eu realmente não sei como isso seria feito. Eu também gostaria que ele usasse askpass quando chamado de um script de shell.

    
por goose121 26.10.2017 / 19:21

2 respostas

1

Você pode verificar se a instância bash atual é interativa . No entanto, isso pode não funcionar para outras camadas.

Agora, se você criar um script de proxy, poderá encapsular a decisão de como iniciar sudo . Nomeie-o como sudoAskpass.sh , por exemplo:

#!/bin/bash

BASH_PARAMETERS="$1"
shift

case "${BASH_PARAMETERS}" in
    *i*)
        sudo -A "$@"
        ;;
    *)
        sudo "$@"
        ;;
esac

exit $?

Você precisa alias sudo , no entanto, como dentro do script, o parâmetro $- indica um shell não interativo:

alias sudo='/path/to/sudoAskpass.sh "$-"'
    
por 27.10.2017 / 11:27
1

Eu descobri como fazer isso. Primeiro, crie um script chamado sudo em algum lugar que esteja antes de /usr/bin em seu caminho com o seguinte conteúdo:

#!/bin/bash

/usr/bin/sudo -A "$@"

Isso apenas passa seus argumentos para o sudo real, mas acrescenta o argumento -A. Então, em /etc/zshrc (ou o arquivo rc de todo o sistema do seu shell), faça um alias de volta ao sudo original:

alias sudo="/usr/bin/sudo"
    
por 28.10.2017 / 20:40

Tags