Sudo

是否可以開始 sudo 互動式會話並提供初始命令?

  • December 11, 2019

我的很多工作流程都涉及使用 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 變數,我能做些什麼嗎?

您可以--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'service_user. 如果要獲取service_user’s .bashrc,可以在ps1.sh文件中進行。

-iinsudo -i不是“互動式”的,它是一個登錄shell(即,啟動一個 shell,它將處理目標使用者.profile或等效使用者並執行給定的命令)。這就是執行包含bash -l實際命令的原因。如果service_user’s.profile無關緊要,您可以這樣做:

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

引用自:https://unix.stackexchange.com/questions/556634