gpt4 book ai didi

bash - 如何在没有进一步用户交互的情况下使用 sudo 在单独的终端中运行命令

转载 作者:行者123 更新时间:2023-12-04 18:45:17 24 4
gpt4 key购买 nike

我正在尝试自动运行多个任务,但我需要将它们作为 sudo 运行。

我想在单独的终端中运行它们,这样我就可以看到每个终端的输出。

这是我设置的一个最小示例(因为我想做的更复杂)

设置两个文件 - 请注意,数据只能以 root 身份读取,并且包含 3 行示例文本:

-rw------- 1 root    root      33 Nov 15 09:29 data
-rwxrwxrwx 1 root root 11 Nov 15 09:30 test.sh*

test.sh 看起来像:
#!/bin/bash
cat data
read -p "Press enter to continue"

此外,我在 bash 启动中设置了名为“SESSION_MANAGER”的用户级变量……这似乎会导致一些问题(参见后面的示例)

所以现在我想生成运行这个脚本的各种终端。我尝试了以下方法:

尝试 1
xfce4-terminal -e './test.sh'

输出:
cat: data: Permission denied
Press enter to continue

尝试 2 - 在开始时使用 sudo
~/src/sandbox$ sudo xfce4-terminal -e './test.sh' 
Failed to connect to session manager: Failed to connect to the session manager: SESSION_MANAGER environment variable not defined

(xfce4-terminal:6755): IBUS-WARNING **: The owner of /home/openbts/.config/ibus/bus is not root!

输出:
this is some data
more data
end
Press enter to continue

在这里你可以看到数据文件的输出是可以打印的,但是我对 session 管理器变量有一些问题。

尝试 3 - 在命令 中使用 sudo
~/src/sandbox$ xfce4-terminal -e 'sudo ./test.sh' 

输出:

[sudo] openbts 的密码:
这是一些数据
更多数据
结尾
按回车继续

在这里你可以看到一切都很好......但我不得不再次输入我的密码,这有点扼杀了我的自动化:(

尝试 4 - 以 root 身份启动
~/src/sandbox$ sudo su
root@openbts:/home/openbts/src/sandbox# xfce4-terminal -e './test.sh'
Failed to connect to session manager: Failed to connect to the session manager: SESSION_MANAGER environment variable not defined

输出:
this is some data
more data
end
Press enter to continue

在这里,输出再次看起来不错,但我有这个 SESSION_MANAGER 问题......而且新的 xfce4-terminal 出现了乱七八糟的字体/外观 - 我猜这是 root 用户设置。

问题

如何在新终端中运行多个 test.sh 实例,而不必输入密码(或完全交互)。我可以在流程开始时输入密码一次(在原始终端中)吗?

正如你所看到的,我在进入 sudo su 时得到了这种工作。 ,但这里的问题是 SESSION_MANAGER 变量 - 不确定这是否是一个问题,但它看起来非常凌乱,而且 xcfe4-terminal 看起来也很糟糕(我想我可以将根设置更改为与我的用户设置相同)。那么,以 root 身份运行时如何避免 SESSION_MANAGER 问题?

最佳答案

如果您在启动单独的终端之前更改用户 ID,您将看到 session 管理器问题。所以解决方案是在终端中运行 sudo。

您不想在 sudo 中输入密码。您可以通过添加来做到这一点

yourname ALL=(ALL) NOPASSWD: ALL

/etc/sudoers (至少在 slackware 上)。您还可以尝试正确设置文件的权限,这样您就不需要一直 root。

请注意,添加该行具有安全隐患;您可能只想允许 cat没有密码(在您的示例中),或者为 sudo 制定更详细的规则。我给出的线只是一个例子。就个人而言,我会查看文件权限。

关于bash - 如何在没有进一步用户交互的情况下使用 sudo 在单独的终端中运行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47304416/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com