好的,出于我不愿讨论的原因(因为它们很傻),我需要制作一个Shell脚本,该脚本应每10秒在OS X上启用SSH。是的,我知道这听起来很傻/毫无意义,但这是有原因的。

为了澄清起见,我知道root密码(我可以在Terminal中成功login root),但是该脚本将在非管理员用户登录时运行。

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

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

我已经尝试过echo $pass | sudo -S login rootecho "1234" | sudo -S su rootecho "1234" | sudo -S su,但是它们都返回“对不起,再试一次。”,即使它回显了正确的密码,我知道因为我可以成功login root

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

我知道这种情况听起来确实是“为什么您需要脚本来执行此操作”,但是请帮助我;我将非常感激。 Here是我当前无法使用的代码。

最佳答案

无需在脚本中存储密码。.只需在NOPASSWD文件中使用/etc/sudoers选项即可。您将需要在其中输入以下内容:

username ALL = NOPASSWD: /bin/launchctl load -w /System/Library/LaunchDaemons/ssh.plist

然后在脚本中执行以下操作:
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist

无需expect或任何怪异的东西。

附言为什么需要这样做!?

关于macos - 假设我知道root密码,如何在OS X中使用标准帐户制作一个sudo本身的Bash脚本?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12379424/

10-14 17:48
查看更多