
如何檢查遠端機器的 root 密碼?
我有一台通常透過 ssh root 和其他使用者存取的遠端電腦。出於安全目的,我有一個腳本可以從中央伺服器定期更改所有金鑰和使用者密碼。
對於非 root 用戶,密碼會像這樣更新。
ssh -i a_priv_key root@ip "echo 'user:NEWPASS' | chpasswd"
我檢查它實際上已經改變了。
ssh -i b_priv_key user@ip "echo NEWPASS | sudo -S ls /root"
但是,如果我想對 root 使用者執行相同的操作,我就會陷入困境。 sudo -S ls /root 總是會傳回包含任何密碼的列表,因為我們只是以 root 身分 ssh 到遠端電腦。
如果我們以使用者身分 ssh 登入,則會提示輸入使用者密碼。
我一直在嘗試使用 su user && su root 獲取某些內容,因為我注意到它會提示輸入 root 密碼,但無法像上面那樣編寫腳本。
來自 root shell 的「login root」也將始終提示輸入密碼,但我也無法編寫明文密碼的腳本。
我已閱讀此問題,但希望有一種內建方法來完成此操作,而不是編寫必須安裝在遠端電腦上的自訂應用程式。 Linux下如何查看密碼?
答案1
如果sudo
可以選擇在目標電腦上進行配置,那麼您可以設定rootpw
某些特定命令,這會sudo
要求輸入 root 密碼而不是使用者密碼。例如,您可以在文件中新增以下行
/etc/sudoers.d/lsrootpw
(並sudo
根據需要重新啟動服務)
Defaults!/bin/ls rootpw
這樣,除 root 之外的任何使用者在執行操作時sudo ls
都會被詢問 root 密碼而不是自己的密碼。因此,您可以測試
ssh -i b_priv_key root@ip su user sudo -S ls /root <<< "NEWPASS"
這會以一種方式或另一種方式進行,具體取決於密碼是否NEWPASS
正確root
。該測試需要目標上有 sudo 用戶。
或者,如果你有 Debian 的runuser
指令,你可以像nobody
下面這樣使用:
ssh -i b_priv_key root@ip runuser -u nobody -- sudo -S ls /root <<< "NEWPASS"
根據密碼的正確性,這也應該始終產生兩個不同的結果。特別是,正確的密碼會導致抱怨密碼nobody
不存在於sudoers
文件中。儘管您可以透過在/etc/sudoers.d/lsrootpw
.
當然,總而言之,這與自訂應用程式沒有太大區別,因為它需要在目標主機上安裝某些內容。同時,這一切都可以透過五個遠端命令序列來完成(新增lsrootpw
、重新啟動sudo
、進行測試、刪除lsrootpw
並再次重新啟動 sudo)