错误:su:必须从终端运行

错误:su:必须从终端运行

当我尝试使用下面给出的 shell 脚本登录 root 用户时,它会抛出错误:

su: must be run from a terminal

脚本 ( scriptfile.sh) 如下所示:

su -s <<EOF
echo Now i am root
whoami
EOF

虽然我可以从终端成功执行su此操作,但它默认以 root 用户登录。

供参考su:当我们替换为时,相同的脚本工作正常sudo。我以普通用户身份运行此脚本,而不是以 root 身份运行。

错误的可能原因是什么?我该如何解决这个问题?

注意:我想在不接触文件的情况下完成它/etc/sudoers

答案1

到目前为止我在谷歌上搜索到的内容很可能是语法/交互式 shell,但我不是专家!

下面对我有用,即使从技术上讲 su 不应该在 shell 脚本中使用, sudo 更安全。

这有效:

#!/bin/bash
exec su root --command 'echo -e "hello world" >> "/home/parallels/rootWasHere.txt"'

这也是如此:

#!/bin/bash

runAsRoot="
printf \"\nhey there\n\"
printf \"\nhello world, I am root\n\" >> \"/home/parallels/rootWasHere.txt\"
"
exec su root -c "$runAsRoot"

另外,关于 su 的 -s 选项,根据手册仅指定 shell。这并不意味着它也会执行之后传递给 -s 的内容,所以我认为你可以执行以下操作:

#!/bin/bash

runAsRoot="
printf \"\nhey there\n\"
printf \"\nhello world, I am root and my shell is \$SHELL\n\" >> \"/home/parallels/rootWasHere.txt\"
"
exec su root -s /bin/zsh -c "$runAsRoot"

答案2

引用自https://netsec.ws/?p=337,

python -c 'import pty; pty.spawn("/bin/sh")'

echo os.system('/bin/bash')

/bin/sh -i

perl —e 'exec "/bin/sh";'

perl: exec "/bin/sh";

ruby: exec "/bin/sh"

lua: os.execute('/bin/sh')

(From within IRB) exec "/bin/sh"

(From within vi) :!bash

(From within vi) :set shell=/bin/bash:shell

(From within nmap) !sh

答案3

您可以将以下内容添加到您的 shell 中

export TERM=xterm

相关内容