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 變數,我能做些什麼嗎?
您可以
--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
文件中進行。
-i
insudo -i
不是“互動式”的,它是一個登錄shell(即,啟動一個 shell,它將處理目標使用者.profile
或等效使用者並執行給定的命令)。這就是執行包含bash -l
實際命令的原因。如果service_user
’s.profile
無關緊要,您可以這樣做:sudo -u service_user bash --rcfile /home/me/ps1.sh