1

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

只是为了澄清,我知道 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 root, 和echo "1234" | sudo -S su,但他们都只是返回“对不起,再试一次。”,即使它正在回显正确的密码,我知道因为我可以成功login root

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

我知道这个场景听起来真的“你为什么需要一个脚本来做这个”,但请帮助我;我将不胜感激。是我当前的非工作代码。

4

2 回答 2

6

而不是将密码存储在脚本中..只需使用文件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或任何奇怪的必要。

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

于 2012-09-12T01:34:30.817 回答
0

您是否尝试在脚本上使用 setuid 标志?

于 2012-09-12T00:21:07.957 回答