Übergeben eines Kennworts an eine Automator-Anwendung

9

Ich habe eine Automator-Anwendung mit dem folgenden Shell-Skript geschrieben, um eine FTP-Verbindung auf meinem System herzustellen:

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

Dies funktioniert genau wie erwartet, außer dass der Befehl sudo ein Kennwort benötigt. Wenn derselbe Befehl auf dem Terminal ausgeführt wird, werden Sie zur Eingabe eines Kennworts aufgefordert. Wenn ich ihn jedoch als Automator-App ausführe, werden Sie nicht zur Eingabe aufgefordert. Gibt es überhaupt eine Möglichkeit, das Passwort im Automator-Skript programmgesteuert an dieses Sudo zu übergeben? Ich weiß, dass dies keine sichere Praxis ist, aber ich möchte es trotzdem tun, da mein System einigermaßen sicher ist und von niemand anderem als mir berührt wird.

Eine Methode "Shell-Skript ausführen ... mit Administratorrechten" gibt den folgenden Fehler aus:

Geben Sie hier die Bildbeschreibung ein

Der Lernende
quelle

Antworten:

10

Mit AppleScript sollten Sie Folgendes tun with administrator privileges:

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

Dadurch wird das Kennwort nicht übergeben, sondern mit einer Standard-OS X-Eingabeaufforderung dazu aufgefordert:

Sie können dies in Ihrem Automator-Workflow auf eine der beiden folgenden Arten verwenden:

grg
quelle
1
@Amit osascript ist für bash :) Wenn Sie reines AppleScript in der AppleScript Automator-Aktion möchten, entfernen Sie das osascript wie folgt: do shell script "sudo -s launchctl load -w /System/Library/LaunchDaemons/ftp.plist" with administrator privileges( Führen Sie einen der folgenden
Schritte
1
Ja, das hat wie Charme funktioniert! Danke für deine Geduld ... dumm mich!
TheLearner
2

erwarten von

Sie können stattdessen ein Tool wie " Erwarten" verwenden, um die Interaktion mit zu skripten sudo. expectist für diese Situation ausgelegt.

Erwarten Sie einen programmierten Dialog mit interaktiven Programmen

Das folgende Shell-Skript kann für Ihre beiden Befehle ausreichen:

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

AppleScript und mit Administratorrechten

Ein alternativer Ansatz ist die Verwendung des Apple Shell- Befehls do shell script . Der Befehl bietet eine Option mit Administratorrechten . Apples Technical Note 2065- Cover enthalten ausführliche Shell-Skripte.

Echo

Andere gängige Ansätze für dieses Problem sind die echoÜbergabe des Kennworts sudomit einer Pipe. In dieser StackOverflow-Antwort werden dieser und andere verwandte Ansätze erläutert. Wie wird ein Befehl mit einem Kennwort versehen, das in bash zur Eingabe eines Befehls auffordert?

Graham Miln
quelle