如何从bash以root身份登录并做事



这是我的简单抨击:

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 -- "passwordr"                                                                      
expect eof

输出为:

spawn sudo -s <<EOF
[sudo] password for user: 
/bin/bash: <<EOF: command not found

此外,which sh输出/bin/sh

如何解决这三个脚本中的错误?

做这种事情不是安全或标准的做法(事实上许多人认为这是灾难性的),在脚本中输入密码真的不是一个好主意。更标准的方法是简单地期望使用root权限执行整个脚本,或者只是让脚本提示输入密码。您还可以允许特定用户使用 /etc/suoders 中的 NOPASSWD 选项通过 sudo 运行各种命令而无需密码。

但是,既然您已经意识到了风险,可以使用sudo -kS让 sudo 从stdin读取密码:

sudo -kSs << EOF
password
whoami
echo "Not a good idea to have a password encoded in plain text"
EOF

相关内容

  • 没有找到相关文章

最新更新