假设我知道root密码,我如何在标准帐户上制作一个sudo全部在OS X中的Bash脚本?

0 macos ssh bash sudo

好吧,由于我不会进入的原因(因为它们相当愚蠢),我需要制作一个shell脚本,它将在OS X上启用SSH,比如10秒.是的,我知道这听起来很愚蠢/没有意义,但有一个原因.

只是为了澄清,我知道root密码(我可以login root在终端中成功),但脚本将在非管理员用户的登录时运行.

该脚本将作为标准(非管理员)帐户上的启动代理运行,并且需要以某种方式将自身提升为root(我碰巧知道其密码),以便它可以启用SSH.

我尝试过使用expect,但无济于事(它只是拒绝在OS X上工作),而且似乎在Bash脚本中传递密码的唯一其他选择是使用echo $pass | sudo -S $command,但它只是一个标准用户试图sudo,它不起作用.

我试过echo $pass | sudo -S login root,echo "1234" | sudo -S su rootecho "1234" | sudo -S su,但他们都只是回到"对不起,再试一次.",即使它呼应正确的密码,我知道,因为我可以成功login root.

无论如何,我想我的问题是,我如何指定Bash我想要以sudoroot身份,而不是运行脚本的当前标准帐户.或者,我如何编写一个脚本,当在普通用户下运行时,它将自己提升为root或至少一个管理帐户,而不需要用户输入; 假设我知道root的密码,当然.

我知道这个场景听起来真的"为什么你需要一个脚本才能做到这一点",但请帮助我; 我真的很感激.是我目前的非工作代码.

Gri*_*vit 5

而不是将密码存储在脚本中..只需使用文件中的NOPASSWD选项/etc/sudoers.你会想要一条线在那里:

username ALL = NOPASSWD: /bin/launchctl load -w /System/Library/LaunchDaemons/ssh.plist
Run Code Online (Sandbox Code Playgroud)

然后在你的脚本中做:

sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
Run Code Online (Sandbox Code Playgroud)

没有expect或任何必要的怪异.

PS为什么你需要这样做!?