是否可以开始 sudo 交互式会话并提供初始命令?

是否可以开始 sudo 交互式会话并提供初始命令?

我的很多工作流程涉及使用 sudo 交互式会话 ( sudo -i) 作为服务用户,该用户能够运行我的个人用户名无法运行的某些操作。当我这样做时,我喜欢保留 PS1 变量和其他一些 bash 细节。由于我无法修改服务用户的.bashrc,因此我在我的主目录中设置了一个脚本来按照我喜欢的方式导出它。例如,我的工作流程可能如下所示:

ssh me@remote
sudo -i -u service_user
. /home/me/ps1.sh
*service user commands here*
exit

我想滚动 sudo 命令并将 PS1 脚本源到一个命令中。我的想法是使用类似的东西sudo -i -u service_user -c sh ". /home/me/ps1.sh",它将传递命令 - 问题是会话将在命令运行后立即退出,而不是挂在交互模式下。除了请求管理员允许通过 sudo 保留 PS1 变量之外,我还能做些什么吗?

答案1

您可以使用--rcfile告诉 bash 读取您的ps1.sh文件而不是service_user's .bashrc

sudo -i -u service_user bash --rcfile /home/me/ps1.sh

然后执行流程将类似于sudo运行bash -lc 'bash --rcfile /home/me/ps1.sh'as service_user。如果您想获取 的来源service_user.bashrc可以在ps1.sh文件中执行此操作。

in不是“交互式”的,它-isudo -i登录shell(即,启动一个 shell,它将处理目标用户.profile或等效用户并运行给定的命令)。这就是为什么执行会bash -l包装实际命令。如果service_users.profile无关紧要,您可以这样做:

sudo -u service_user bash --rcfile /home/me/ps1.sh

相关内容