sudo対話型セッションを開始して初期コマンドを提供できますか?

sudo対話型セッションを開始して初期コマンドを提供できますか?

私のワークフローの多くは、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

以下を使用する代わりに、--rcfilebashにファイルを読み込むように指示できます。ps1.shservice_user.bashrc

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

その後、実行フローは次の実行とsudo似ています。ソースを取得するには、ファイルでこれを行うことができます。bash -lc 'bash --rcfile /home/me/ps1.sh'service_userservice_user.bashrcps1.sh

inは「対話型」ではありません-isudo -iログイン.profileシェル(つまり、ターゲットユーザーまたはそれに対応するユーザーを処理し、指定されたコマンドを実行するシェルを起動します)。これが、すぐに実行がbash -l実際のコマンドをラップする理由です。service_usersが重要でない場合.profileは、次のことができます。

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

おすすめ記事