Melewati kata sandi ke aplikasi Automator

9

Saya telah menulis aplikasi Automator dengan skrip shell berikut untuk membuka koneksi FTP di sistem saya:

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

Ini berfungsi persis seperti yang diharapkan kecuali bahwa perintah sudo memerlukan kata sandi. Ketika perintah yang sama dijalankan di Terminal, itu meminta saya untuk kata sandi tetapi ketika dijalankan sebagai aplikasi Automator, tidak meminta saya untuk input apa pun. Apakah ada cara lain untuk secara sandi meneruskan sandi ke sudo ini dalam skrip Automator? Saya tahu ini bukan praktik yang aman tetapi saya masih ingin melakukannya karena sistem saya cukup aman dan tidak tersentuh oleh orang lain selain saya.

Metode "lakukan skrip shell ... dengan hak administrator" memberikan kesalahan berikut:

masukkan deskripsi gambar di sini

Pembelajar
sumber

Jawaban:

10

AppleScript harus membiarkan Anda melakukan ini dengan menggunakan with administrator privileges:

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

Ini tidak meneruskan kata sandi, tetapi menanyakannya dengan prompt OS X standar:

Anda dapat menggunakan ini dalam alur kerja Automator Anda di salah satu dari dua cara berikut:

GRG
sumber
1
@Amit osascript adalah untuk bash :) Jika Anda ingin AppleScript murni dalam aksi AppleScript Automator, hapus osascript seperti ini: do shell script "sudo -s launchctl load -w /System/Library/LaunchDaemons/ftp.plist" with administrator privileges( Lakukan salah satu dari yang berikut dari gambar ini )
grg
1
Ya, ini bekerja seperti pesona! Terima kasih atas kesabaran Anda ... konyol saya!
TheLearner
2

mengharapkan

Sebagai gantinya, Anda dapat menggunakan alat seperti harapkan untuk skrip interaksi sudo. expectdirancang untuk situasi ini.

mengharapkan - dialog terprogram dengan program interaktif

Skrip shell berikut mungkin cukup untuk dua perintah Anda:

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

AppleScript dan dengan hak administrator

Pendekatan alternatif adalah dengan menggunakan perintah script shell AppleScript . Perintah ini menawarkan opsi dengan administrator privilege . Catatan Teknis Apple 2065 mencakup skrip shell secara detail.

gema

Pendekatan umum lainnya untuk masalah ini melibatkan penggunaan echountuk meneruskan kata sandi sudodengan sebuah pipa. Jawaban StackOverflow ini membahas ini dan pendekatan terkait lainnya, Bagaimana cara memberikan kata sandi pada perintah yang meminta untuk di bash?

Graham Miln
sumber