私のワークフローの多くは、sudo -i
私の個人ユーザー名ができない特定のタスクを実行できるサービスユーザーとしてsudo対話型セッション()を使用することに関連しています。これを行うときは、PS1変数と他のbashの詳細を維持したいと思います。サービスユーザーの変更ができないため、.bashrc
ホームディレクトリにスクリプトを設定して目的の方法でエクスポートしました。たとえば、私のワークフローは次のようになります。
ssh me@remote
sudo -i -u service_user
. /home/me/ps1.sh
*service user commands here*
exit
sudoコマンドをロールバックし、PS1スクリプトを1つのコマンドにソース化したいと思います。私の考えは、コマンドを渡すこのようなものを使用することです。sudo -i -u service_user -c sh ". /home/me/ps1.sh"
問題は、インタラクティブモードにとどまらず、コマンドが実行されるとすぐにセッションが終了することです。管理者にsudoを介してPS1変数を保持する権限を要求することに加えて、私ができることは他にありますか?
ベストアンサー1
以下を使用する代わりに、--rcfile
bashにファイルを読み込むように指示できます。ps1.sh
service_user
.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
.bashrc
ps1.sh
inは「対話型」ではありません-i
。sudo -i
ログイン.profile
シェル(つまり、ターゲットユーザーまたはそれに対応するユーザーを処理し、指定されたコマンドを実行するシェルを起動します)。これが、すぐに実行がbash -l
実際のコマンドをラップする理由です。service_user
sが重要でない場合.profile
は、次のことができます。
sudo -u service_user bash --rcfile /home/me/ps1.sh