在 bash 脚本中、在脚本内提供 SU 密码?

在 bash 脚本中、在脚本内提供 SU 密码?

目的是在机器未收到用户的中止命令时重新启动机器。问题在于终端的设置方式,用户必须为shutdowninitreboot等命令提供 SU 密码。我们想知道是否可以在 bash 脚本本身中提供密码,也许使用 stdin。即:

#!/bin/bash
# (script)
echo "Terminal will restart in 60s, Ctrl+C to cancel."
sleep 60
su - root -c "init 6" < "password"

我们将尝试将密码放入文件中并将其作为标准输入。

编辑:sudoexpect不是解决方案,因为由于需要大量的许可文书工作和有限的时间,安装它们是不可能的。此外,我们希望使用init 6shutdown -r而不是reboot

答案1

您可以配置sudo允许任何用户以 root 身份运行您指定的某些命令,而无需输入密码。请参阅这篇 Server Fault 文章有关如何配置的描述sudo

然后,在脚本中使用 sudo 而不是 su:

sudo 重启

答案2

据我所知,您无法执行所要求的操作。当您使用stdinwith 时<,密码将在 shell 实际要求输入密码之前通过 stdin 输入。您应该尝试使用 sudo。如果不行,最好的办法是chmod reboot并授予自己执行权限。

答案3

你可以使用 socat 来完成:

user@host$ (sleep 1; echo SuperSecr3t) | socat - EXEC:'su -c id',pty
Password: ### No input here, just wait 1sec
uid=0(root) gid=0(root) groups=0(root)

相关内容