Ssh
如何使用“sudo su -”安全地以 root 身份自動執行命令?
提示(在客戶端,如何加密文件/密碼):
# 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 fabric和capistrano。它們都很容易學習,會讓你的生活更輕鬆。