如何从 Bash 以 root 身份登录并执行操作

MLS*_*LSC 3 linux sudo bash login su

这是我的简单 bash:

cat test.sh

#!/bin/bash 
echo "hello"
su - root -c /path/to/script.sh <<EOF
password                              
EOF
whoami
echo "good bye"
Run Code Online (Sandbox Code Playgroud)

但我收到此错误:

./test.sh
hello
su: must be run from a terminal
<current-user>
good bye
Run Code Online (Sandbox Code Playgroud)

(或者)

cat test2.sh
#!/bin/bash 
echo "hello"
sudo su <<EOF
password                              
EOF
whoami
echo "good bye"
Run Code Online (Sandbox Code Playgroud)

又一个错误

(或者)

cat test3.sh
#!/bin/bash 
echo "hello"
su root <<EOF
password                              
EOF
whoami
echo "good bye"
Run Code Online (Sandbox Code Playgroud)

又是错误...

当我尝试:

#!/bin/bash
echo "hello"
sudo -s <<EOF
<password>
echo Now I am root
id                                                                      
echo "yes!"
EOF
whoami
echo "good bye"
Run Code Online (Sandbox Code Playgroud)

然后输出是:

./script.sh
hello
[sudo] password for <user>:
Run Code Online (Sandbox Code Playgroud)

我还将我的脚本更改为:

#!/usr/bin/expect -f
spawn sudo -s <<EOF
expect "assword for user:"
send -- "password\r"
expect eof
Run Code Online (Sandbox Code Playgroud)

和输出是:

spawn sudo -s <<EOF
[sudo] password for user:
/bin/bash: <<EOF: command not found
Run Code Online (Sandbox Code Playgroud)

同时which sh输出/bin/sh

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

Mar*_*iae 7

有很多方法可以做到这一点......这里有一些:

  1. 以该用户身份登录:实际上,

    用户 2

或者只是获得相同的环境,

  su -l user2
Run Code Online (Sandbox Code Playgroud)
  1. 以该用户身份执行单个命令:

    su user2 -c cat myfile.txt

  2. 在这里使用文档:

    sudo su user <<EOF

    command1

    command2

    .....

    EOF

您的命令可能会失败,因为 /tmp/script.sh 不可执行,或者 one.sh 中的最后一个 echo 没有匹配的顶点 ( ")。