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

标签 bash ubuntu terminal sudo

我正在尝试自动运行多个任务,但我需要将它们作为 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/

相关文章:

ubuntu - Foreman 1.7 在 Ubuntu 14.04 上安装错误

Apache 无法在 Ubuntu 上的 AMPPS 中启动

bash - 通过命令行传递要使用 getopts() 处理的数组

bash - 如何根据变量的长度来控制线条的长度并且能够使线条均匀

ruby-on-rails - Ruby on Rails : DOcker : Is it feasible to build ROR project dependencies inside docker image

linux - 服务器中缺少磁盘空间

java - 如何使用隐藏终端启动java程序

linux - 如何在 openBSD 上使用 git 设置自动完成?

linux - bash sh - 找不到命令

regex - BASH 正则表达式匹配 - 在要匹配的括号字符列表中包括括号?