Ssh

如何使用“sudo su -”安全地以 root 身份自動執行命令?

  • May 9, 2013

提示(在客戶端,如何加密文件/密碼):

# encrypt pwd with ssh key: 
openssl rsa -in ~/.ssh/id_rsa -outform pem > ~/.ssh/TEMP-id_rsa.pem 2>/dev/null
openssl rsa -in ~/.ssh/id_rsa -pubout -outform pem > ~/.ssh/TEMP-id_rsa.pub.pem 2>/dev/null
echo $PWDHERE > ~/.ssh/TEMP.pwd
openssl rsautl -encrypt -pubin -inkey ~/.ssh/TEMP-id_rsa.pub.pem -in ~/.ssh/TEMP.pwd -out ~/.ssh/TEMP.pwd.enc 2>/dev/null
rm ~/.ssh/TEMP.pwd > /dev/null 2>&1

# decrypt: 
PWDHERE=`openssl rsautl -decrypt -inkey ~/.ssh/TEMP-id_rsa.pem -in ~/.ssh/TEMP.pwd.enc`

所以..通過SSH在伺服器上以root使用者在伺服器上自動執行命令將是一項非常簡單的任務(最後我們需要從伺服器端的桌面電腦以root使用者執行腳本,但執行命令自動化就足以知道,從那裡我們可以做的事情..)。

但是:問題是,如果我們必須首先在伺服器上“sudo su -”並在其中輸入密碼,如何安全地使用 root 自動執行命令?

更新:修改 sudoers 文件不是一種選擇。(也許木偶可以做到這一點??)

更新#2:

echo myPassword | sudo -S ls /tmp

不安全 AFAIK。(因為如果其他使用者 ‘ps -ef’ 他們可以看到 pwd 一段時間?)所以這也不是一個解決方案。

更新#3:我想做“使用臨時命令遠端控制機器”

你想要做的是昆蟲本身,真的不應該做。

鑑於此,也許您想重新考慮您對“安全”的要求。到底為什麼要打擾sudo?您可以設置一個(第二個)SSH 伺服器,它接受以 root 使用者身份登錄,但僅使用公鑰身份驗證。這樣,您根本不需要傳輸密碼,只需以 root 使用者身份登錄並執行您的命令。你可以簡單地

  • 從您目前的 ssh 伺服器複製配置,該伺服器很可能儲存在/etc/ssh/sshd_config,

  • 將其修改為

    • 允許root登錄,
    • 允許公鑰認證,
    • 拒絕密碼驗證,
    • 讓它監聽不同的埠,例如 666
  • 使用該選項啟動一個新sshd實例,使其使用您的新備用配置文件。-f

然後您設置公鑰身份驗證,以便您可以ssh root@server -p 666 "rm -rf /"從您的桌面電腦上無需 sudo 和密碼。

甩掉包袱 :-)

我實際上使用 python fabriccapistrano。它們都很容易學習,會讓你的生活更輕鬆。

引用自:https://unix.stackexchange.com/questions/69172