Передача пароля в приложение Automator

9

Я написал приложение Automator со следующим сценарием оболочки, чтобы открыть FTP-соединение в моей системе:

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

Это работает точно так, как ожидается, за исключением того, что для команды sudo требуется пароль. Когда та же команда запускается в терминале, он запрашивает у меня пароль, но при запуске в качестве приложения Automator не запрашивает ввода данных. Есть ли способ программно передать пароль этому sudo в скрипте Automator? Я знаю, что это небезопасная практика, но я все еще хочу сделать это, поскольку моя система достаточно безопасна и не затронута кем-либо, кроме меня.

Метод "do shell script ... с правами администратора" выдает следующую ошибку:

введите описание изображения здесь

TheLearner
источник

Ответы:

10

AppleScript должен позволить вам сделать это с помощью with administrator privileges:

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

Это не передает пароль, но запрашивает его со стандартным приглашением OS X:

Вы можете использовать это в рабочем процессе Automator одним из следующих двух способов:

Grg
источник
1
@Amit osascript предназначен для bash :) Если вы хотите использовать чистый AppleScript в действии AppleScript Automator, удалите osascript следующим образом: do shell script "sudo -s launchctl load -w /System/Library/LaunchDaemons/ftp.plist" with administrator privileges( Выполните одно из следующих действий на этом рисунке )
grg
1
Да, это работает как шарм! Спасибо за ваше терпение ... глупый я!
TheLearner
2

ожидать

Вместо этого вы можете использовать инструмент, подобный ожидаемому, для сценария взаимодействия с sudo. expectпредназначен для этой ситуации.

ожидайте - запрограммированное общение с интерактивными программами

Следующего сценария оболочки может быть достаточно для ваших двух команд:

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

AppleScript и с правами администратора

Альтернативный подход - использовать команду сценария do shell от AppleScript . Команда предлагает опцию с правами администратора . В технических заметках Apple 2065 подробно описан сценарий оболочки.

эхо

Другие распространенные подходы к этой проблеме включают использование echoдля передачи пароля sudoс помощью канала. В этом ответе StackOverflow обсуждаются этот и другие связанные подходы. Как предоставить пароль для команды, запрашивающей пароль в bash?

Грэм Милн
источник