Запрашивать у пользователя пароль с диалоговым окном при использовании sudo
Мне нужно выполнить команду с sudo и хочу отобразить диалоговое окно для пользователя, чтобы ввести свои учетные данные. Попытки настроить приглашение с помощью Applescript были не чем иным, как мучительными, и использование встроенного "сценария do shell с правами администратора" не позволяет настроить окно, чтобы пользователь знал, откуда поступает запрос.
Конечно, есть способ отобразить окно, пользователь может ввести свои учетные данные и отправить значения обратно в sudo для выполнения команды? cocoasudo выглядит многообещающе, но в окне подсказки также написано "cocoasudo", которое мне нужно заменить именем моего приложения. Кто-нибудь нашел решение для реализации такого рода функциональности?
3 ответа
Создание пользовательских окон выходит за рамки основного яблочного сценария. Вам нужно будет расширить свои навыки программирования, если вы этого хотите. Вам нужно будет научиться использовать инструменты, которые Apple предоставляет для создания окон и тому подобное. Суть в том, что вам нужно изучить API AppleScriptObjC или Objective-C/Cocoa и узнать, как их использовать в Xcode.
С учетом сказанного, если вы не в изучении новых вещей, то используйте инструменты, которые у вас есть. Примерно так будет работать. Вы можете настроить значок, кнопки, текст и т. Д. У вас даже может быть скрытый ответ, чтобы защитить пользователя при вводе паролей. Есть много вещей, которые вы можете сделать с Applescript без дальнейшего изучения...
display dialog "OSAScript will need an Admin User name and password in order to make your changes." & return & return & "Please enter an admin username." default answer "" with icon 2
set username to text returned of result
display dialog "OSAScript will need an Admin User name and password in order to make your changes." & return & return & "Please enter an admin password." default answer "" with icon 2 with hidden answer
set pssword to text returned of result
do shell script "osascript -e \"return 1\"" user name username password pssword with administrator privileges
Кроме того, учтите, что после аутентификации с помощью sudo вам не нужно вводить пароль повторно в течение следующих пяти минут. Это не решит вашу проблему напрямую, но даст вам больше возможностей для взаимодействия с пользователем. Параметр -n для sudo запрещает запрашивать пароль (команда запускается или sudo завершается с ошибкой).
Вы можете использовать -n в сочетании с опцией -A, которая заставляет sudo запускать отдельную программу, единственная задача которой - собирать и выводить пароль. Позволит ли это вам использовать AppleScript, чтобы лучше делать то, что вы хотите?
Если вы знакомы с Javascript, вы можете использовать sudo-prompt
модуль для узла для запуска вашей команды с помощью sudo
и запросить диалоговое окно при необходимости. Диалоговое окно - это встроенное приглашение операционной системы, поэтому пароль пользователя никогда не будет доступен вашему приложению. Вы также можете указать название и значок вашего приложения в macOS. Модуль также работает на Windows и Linux.