shell 如何让它显示用户名和密码对话框一次?

soat7uwm  于 2023-10-23  发布在  Shell
关注(0)|答案(3)|浏览(138)

你好
在我的AppleScript中,我运行以下代码,

do shell script "sudo networksetup -setproxybypassdomains Ethernet *.local, 169.254/16"
do shell script "sudo networksetup -setwebproxy Ethernet 127.0.0.1 8888"
do shell script "sudo networksetup -setsecurewebproxy Ethernet 127.0.0.1 8888"

但是,它每次都要求输入密码。我的意思是,当脚本被打开它要求密码3倍的每一行的过程。为了防止询问密码,我必须在终端中键入以下内容,
sudo chmod u+s /usr/sbin/network setup
当按下回车键时,它会要求输入密码,一旦输入并运行AppleScript,它就不再要求输入密码(3次)。
但是用户必须进入终端并输入上述命令。为了防止这种情况,我在AppleScript中使用了以下代码:

do shell script "sudo chmod u+s /usr/sbin/networksetup"

因此,用户运行AppleScript,它将自动设置。但我得到以下错误消息,

如何更改AppleScript,

do shell script "sudo chmod u+s /usr/sbin/networksetup"

.让它只要求输入一次密码,然后执行其余的“. do shell script.”部分而不要求输入密码。或者将密码沿着在上面的代码行中以使其工作?

af7jpaap

af7jpaap1#

你看过“do shell script”命令的定义了吗?你不能在这个命令中使用sudo。您可以使用“with administrator privileges”(具有管理员权限),如果愿意,您可以提供“user name”(用户名)和“password”(密码)。
打开AppleScript编辑器。在文件菜单下选择“打开字典”。从对话框窗口中选择StandardAdditions.osax。在字典的搜索字段中搜索“do shell script”以查看您可以使用该命令执行的所有操作。
例如,这里是你如何使用它。祝你好运

do shell script "networksetup -setproxybypassdomains Ethernet *.local, 169.254/16" with administrator privileges
vq8itlhq

vq8itlhq2#

您可以将密码作为参数传递给sudo。从手册页:

-S          The -S (stdin) option causes sudo to read the password from
                   the standard input instead of the terminal device.  The
                   password must be followed by a newline character.
sigwle7e

sigwle7e3#

旧问题的新答案,但由于没有答案包括保留名称和密码以及在输入过程中适当隐藏密码,这可能有助于吸引问题的人。这两个都做了,然后在一个类似于OP的shell脚本中使用name和password。名称和密码作为脚本的属性存储,但保持不可见。如果脚本更改,它们将自动“删除”,并且仅在第一次运行时需要重新输入。如果名称或密码不正确,则脚本将正常退出,然后继续执行任何后续代码。shell脚本中不需要“sudo”,只要它是“以管理员权限”运行的。通常情况下,只要运行“与管理员权限”将强制弹出一个要求的名称和密码。但是因为它们已经包含在这个例子中,所以脚本会默默地应用存储的名称和密码,并且在第一次运行后不会出现弹出窗口。

----------ENTER NAME & PASSWORD ONCE*----------
property admin : null --resets to null after each edit*
property pswrd : null --resets to null after each edit*
#--#--#--NOT A SECURE WAY TO STORE PASSWORDS!--#--#--#
repeat
    try
        if admin is null then set admin to (text returned of (display dialog "Enter username:" default answer "")) --get name.
        if pswrd is null then set pswrd to (text returned of (display dialog "Enter password for " & admin & ":" default answer "" with hidden answer)) --get pw.
        do shell script "whoami" user name admin password pswrd with administrator privileges --test name & pw.
        exit repeat --name & pw were OK!
    on error err
        set {admin, pswrd} to {null, null}
        if err is "User canceled." then return err
        display dialog err with icon 0
    end try
end repeat
--beyond this line, admin-name & password are retained in the admin & pswrd properties!
----------EXAMPLE OF NAME & PASSWORD USEAGE----------
do shell script "networksetup -listallhardwareports" user name admin password pswrd with administrator privileges

相关问题