Bash
如何從 Bash 以 root 身份登錄並做一些事情
這是我的簡單 bash:
cat test.sh #!/bin/bash echo "hello" su - root -c /path/to/script.sh <<EOF password EOF whoami echo "good bye"
但我得到這個錯誤:
./test.sh hello su: must be run from a terminal <current-user> good bye
(或者)
cat test2.sh #!/bin/bash echo "hello" sudo su <<EOF password EOF whoami echo "good bye"
又是一個錯誤
(或者)
cat test3.sh #!/bin/bash echo "hello" su root <<EOF password EOF whoami echo "good bye"
又報錯了……
當我嘗試時:
#!/bin/bash echo "hello" sudo -s <<EOF <password> echo Now I am root id echo "yes!" EOF whoami echo "good bye"
然後輸出是:
./script.sh hello [sudo] password for <user>:
我還將腳本更改為:
#!/usr/bin/expect -f spawn sudo -s <<EOF expect "assword for user:" send -- "password\r" expect eof
輸出是:
spawn sudo -s <<EOF [sudo] password for user: /bin/bash: <<EOF: command not found
which sh
輸出也是/bin/sh
如何解決這三個腳本中的錯誤?
您可以通過管道輸入密碼並將其發送到腳本內的命令中。
echo "password" | sudo -S
但是在命令行中發送密碼並不是一個好主意。如果您需要有關如何從腳本以 root 身份登錄的更多資訊,可以查看此處提供的答案。
但是,如果是出於實驗目的,我們可以使用 expect 從命令行輸入密碼。腳本需要修改如下。
#!/usr/bin/expect -f spawn sudo -s <<EOF expect "assword for username:" send -- "user-password\r" expect eof
需要最後一行,因為我們需要在輸入密碼後按 Enter。正如 Tian 所建議的,在 shell 腳本中發送 root 密碼不是一個好主意。