Le passage d'un mot de passe à une application Automator

9

J'ai écrit une application Automator avec le script shell suivante pour ouvrir une connexion FTP sur mon système:

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

Cela fonctionne exactement comme prévu, sauf que la commande sudo a besoin d'un mot de passe. Lorsque la même commande est exécutée sur Terminal, elle me demande un mot de passe, mais lorsqu'elle est exécutée en tant qu'application Automator, ne me demande aucune entrée. Y at - il de toute façon de passer le mot de passe par programme à ce sudo dans le script Automator? Je sais que ce n'est pas une pratique sûre, mais je veux toujours le faire car mon système est raisonnablement sécurisé et intact par quelqu'un d'autre que moi.

Une méthode « faire script shell ... avec des privilèges d'administrateur » donne l'erreur suivante:

entrez la description de l'image ici

TheLearner
la source

Réponses:

10

AppleScript devrait vous permettre de le faire en utilisant with administrator privileges:

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

Cela ne transmet pas le mot de passe, mais le demande avec une invite OS X standard:

Vous pouvez l'utiliser dans votre flux de travail Automator de l'une des deux manières suivantes:

grg
la source
1
@Amit osascript is for bash :) Si vous voulez un AppleScript pur dans l'action AppleScript Automator, supprimez l'osascript comme ceci: do shell script "sudo -s launchctl load -w /System/Library/LaunchDaemons/ftp.plist" with administrator privileges( Effectuez l'une des actions suivantes sur cette image )
grg
1
Oui, cela a fonctionné comme par enchantement! Merci pour votre patience ... idiot moi!
TheLearner
2

attendre

Vous pouvez utiliser à la place un outil comme s'attendre à écrire l'interaction avec sudo. expectest conçu pour cette situation.

attendre - le dialogue programmé avec des programmes interactifs

Le script shell suivant peut être suffisant pour vos deux commandes:

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

AppleScript et avec des privilèges d'administrateur

Une autre approche consiste à utiliser la commande de script do shell d' AppleScript . La commande offre un avec des privilèges d'administrateur option. Les notes techniques d'Apple 2065 couvrent le script shell en détail.

écho

D'autres approches courantes à ce problème impliquent d'utiliser echopour passer le mot de passe à sudoun canal. Cette réponse StackOverflow discute cela et d' autres approches connexes, Comment fournir un mot de passe à une commande qui invites pour un en bash?

Graham Miln
la source