簡體   English   中英

無需密碼即可遠程關閉/重啟Linux機器

[英]Remotely shutdown/restart a Linux machine without password

我正在編寫一個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: 

為了克服這個問題,我需要改變什么?
shutdown -r now是唯一的方式,還是我可以這樣做(更直接)?

編輯:在這個問題中,使用了一種名為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方式更干凈,維護此代碼的任何人都是如此。

使用sudo python運行腳本。 例如,如果您的文件名為remotesd.py,則為sudo python remotesd.py

除了sudoers文件更改,它為用戶提供了額外的(有時是不需要的)特權,您可以使用setuid 即通過調用sudo chown root:<caller's username> thefile將可執行文件的所有者更改為sudo chown root:<caller's username> thefile然后將文件的權限更改為4750.這樣,任何有權執行該文件的人都將被視為執行時的root用戶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM