macos - 假设我知道root密码,如何在OS X中使用标准帐户制作一个sudo本身的Bash脚

好的,出于我不愿讨论的原因(因为它们很傻),我需要制作一个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/

相关文章:

security - 在 Groovy 动态 SQL 中检测 SQL 注入(inject)

php - 设备的 ioctl 不合适

grails - 路由到webapp文件夹时,将默认渲染文件设置为grails 3中的index.h

ssh - 将现有的 ssh_authorized_keys 导入 puppet 资源

amazon-web-services - AWS EC2 - 为什么连接时我的 SSH 公钥不存在

json - JSON获取全数字

grails - 验证标准无法使用

php - PHP Net_SSH2-exec()如何获取命令返回码

ssh - 如何找到在amazon-ec2中启动的实例的用户名?

mongodb - 在grails和MongoDB插件的条件查询中使用allowDiskUse?