Passando uma Senha para um Aplicativo Automator

9

Eu escrevi um aplicativo Automator com o seguinte script de shell para abrir uma conexão FTP no meu sistema:

sudo -s launchctl load -w /System/Library/LaunchDaemons/ftp.plist
osascript -e 'tell app "Finder" to display alert "SFTP Opened"'

Isso funciona exatamente como o esperado, exceto que o comando sudo precisa de uma senha. Quando o mesmo comando é executado no Terminal, ele solicita uma senha, mas quando executado como um aplicativo Automator, não solicita nenhuma entrada. Existe alguma maneira de passar programaticamente a senha para este sudo no script do Automator? Sei que não é uma prática segura, mas ainda quero fazê-lo, pois meu sistema é razoavelmente seguro e intocado por qualquer pessoa que não seja eu.

Um método "fazer shell script ... com privilégios de administrador" está fornecendo o seguinte erro:

insira a descrição da imagem aqui

TheLearner
fonte

Respostas:

10

AppleScript deve permitir que você faça isso usando with administrator privileges:

osascript -e 'do shell script "sudo -s launchctl load -w /System/Library/LaunchDaemons/ftp.plist" with administrator privileges'

Isso não passa a senha, mas solicita-a com um prompt padrão do OS X:

Você pode usar isso no seu fluxo de trabalho do Automator de uma das duas maneiras a seguir:

grg
fonte
1
@Amit osascript é para a festança :) Se você quer pura AppleScript na ação AppleScript Automator, remova o osascript assim: do shell script "sudo -s launchctl load -w /System/Library/LaunchDaemons/ftp.plist" with administrator privileges( Do uma das seguintes opções a partir desta imagem )
GRG
1
Sim, isso funcionou como charme! Obrigado pela sua paciência ... bobo eu!
TheLearner
2

Espero

Em vez disso, você pode usar uma ferramenta como a expectativa de script da interação sudo. expectfoi projetado para esta situação.

expect - diálogo programado com programas interativos

O seguinte script de shell pode ser suficiente para seus dois comandos:

#!/usr/bin/expect -f
spawn sudo -s launchctl load -w /System/Library/LaunchDaemons/ftp.plist
send "my-secret-password\n"

AppleScript e com privilégios de administrador

Uma abordagem alternativa é usar o comando do shell script do AppleScript . O comando oferece uma opção com privilégios de administrador . As capas da Nota Técnica 2065 da Apple fazem shell script em detalhes.

eco

Outras abordagens comuns para esse problema envolvem o uso echopara passar a senha sudocom um pipe. Esta resposta do StackOverflow discute esta e outras abordagens relacionadas: Como fornecer senha para um comando que solicita uma no bash?

Graham Miln
fonte