加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

无需密码即可远程关闭/重启Linux机器

发布时间:2020-12-14 01:14:07 所属栏目:Linux 来源:网络整理
导读:我正在编写一个pyQt客户端 – 服务器应用程序,它可以远程重启/关闭PC. 接收方正在监听网络以接收消息,并且发送方向所选接收方发送重启/关闭消息. 以下部分代码在接收器上运行: import osself.currentOS = calling a function to determine the current OSif
我正在编写一个pyQt客户端 – 服务器应用程序,它可以远程重启/关闭PC.
接收方正在监听网络以接收消息,并且发送方向所选接收方发送重启/关闭消息.

以下部分代码在接收器上运行:

import os

self.currentOS = calling a function to determine the current OS

if self.currentOS == "Win":
    os.system("shutdown -r -f -t 1")
elif self.currentOS == "Lin":
    os.system("shutdown -r now")

我有2个虚拟机充当接收器,一个在Windows上,另一个在Linux上.

当我向Windows接收器发送重新启动消息时,机器重新启动.
当我向Linux接收器发送重启消息时,它会要求输入密码

Incoming:EXEC_OP_RESTART
[sudo] password for jwalker:

为了克服这个问题,我需要改变什么?
是关闭-r现在是唯一的方式,还是我可以这样做(更直接)?

编辑:
在this问题中,使用了一种名为dbus的东西,它没有密码,我正在搜索dbus,作为替代方案.

解决方法

它具有重启Linux机器的root权限.一些桌面环境使用守护进程来解决这个问题….但我建议编辑sudoers文件

https://help.ubuntu.com/community/Sudoers for howto.基本上你会想要在没有密码的情况下运行restart命令 – 只有restart命令.

就像是:

ALL ALL=(ALL) NOPASSWD: /usr/sbin/shutdown

将允许机器上的任何用户重新启动它而不使用密码.您可能需要在系统命令中使用’sudo’作为’shutdown’的前缀,尽管它看起来像是以某种方式自动调用.如果这不够安全,您可以创建一个组,使您的程序作为该组运行,然后允许该组重新启动.

编辑:显然这可以用DBus完成(注意:我没有测试过这个):

dbus-send --system --print-reply --dest="org.freedesktop.Hal" /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Restart int32:0

这是因为dbus以root身份运行(或具有root权限),因此可以接受从非成熟进程重新启动的请求并对其执行操作.我仍然认为sudo方式更干净,维护此代码的任何人都是如此.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读