Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关闭/重新启动Linux系统的shell脚本_Linux_Shell - Fatal编程技术网

关闭/重新启动Linux系统的shell脚本

关闭/重新启动Linux系统的shell脚本,linux,shell,Linux,Shell,是否有合适的shell脚本用于关闭或重新启动Linux机器?我尝试了一个shell脚本来关闭,但是当我输入sudo shutdown时,它会要求输入密码。如何使用脚本输入密码?是的,使用-S开关从STDIN读取密码: $echo <password> | sudo -S <command> $echo | sudo-S 公开你的密码通常是个坏主意,搜索一些可以保护/隐藏密码的东西。在过去,我在定期执行脚本时使用Jenkins插件来实现这一点。如果你真的想实现它,你应该

是否有合适的shell脚本用于关闭或重新启动Linux机器?我尝试了一个shell脚本来关闭,但是当我输入
sudo shutdown
时,它会要求输入密码。如何使用脚本输入密码?

是的,使用-S开关从STDIN读取密码:

$echo <password> | sudo -S <command>
$echo | sudo-S

公开你的密码通常是个坏主意,搜索一些可以保护/隐藏密码的东西。在过去,我在定期执行脚本时使用Jenkins插件来实现这一点。

如果你真的想实现它,你应该编写一个包含
shutdown
命令的脚本;将
root
设为其所有者,然后使用
chmod
命令设置SUID位,并为每个人授予其可执行权限。执行时,脚本的所有者将成为
root
,不应询问密码。

我认为另一种更干净的方法:

/etc/sudoers.d/
中创建一个包含以下内容的新文件:

%users ALL=NOPASSWD: /sbin/shutdown
%users ALL=NOPASSWD: /sbin/reboot
如果“用户”组的任何用户试图执行关机或重新启动,这会导致sudo请求密码。当然,您也可以指定另一个组,可能是一个新创建的组,用于更好地控制重新启动权限


有关
sudo
的其他可能设置的详细信息,请参见。

使用脚本输入密码通常不是一个好主意,因为泄露脚本(例如权限不严格、备份不安全等)可能会泄露您的根密码。考虑一个不同的设计-一个守护程序启动,例如“代码>根/代码>。”OrdSkoo:谢谢你提供的信息。但我想用shell脚本关闭机器。为此,我们需要输入密码。@Wald:你能解释一下我们如何使用shell脚本关闭linux机器吗?就像Wald说的,
$echo | sudo-S reboot
$echo | sudo-S poweroff
是的,在我上面提供的行中,你只需更改密码即可(你也可以回显一个系统变量,虽然它不是完全隐藏的密码,但可能比直接从shell脚本中回显要好。你必须从sudo改为要执行的,而不是简单地执行“sudo”登录。我建议使用字符串重定向,因为它至少不会被列在进程中:
sudo-S@ColOfAbRiX ye可能更好,但最好他用其他程序加密。@bratkartofel:文件名应该是什么?你可以随意命名,例如简单地“重新启动”或“电源控制”。更多信息可在该目录内的自述文件中找到。我喜欢这种方法。有人能验证它是否有效吗?为了安全起见,许多操作系统在应用于可执行shell脚本时会忽略setuid属性。(Wikipedia:)