私は他の多くのスクリプトを呼び出す bash スクリプトを書いています。
いくつかのスクリプトは user_1 として実行する必要がありますが、いくつかのスクリプトは user_2 として実行する必要があります。
スクリプトは厳密な順序で呼び出す必要があります。スクリプトを user_1 として開始し、su を何度も使用して user_2 にします。これらの場合、su にはパスワードが必要なため、何度も再入力する必要があります。それを避けたいのですが、 su にはパスワードパラメーターがありません。
sudo と expect はインストールされていません。
4 に答える
もしあなたがたまたまzshを持っているなら、私はあなたがこれを簡単に行うことができると思います-次のようなものです:
#!/bin/zsh
coproc user1_script
su user2
do_stuff
echo "your_turn" >&p
read MY_TURN
do_more_stuff
echo "your_turn" >&p
read MY_TURN
...
user1_script:
#!/bin/zsh
read MY_TURN
do_stuff
echo your_turn
read MY_TURN
do_more_stuff
...
行き詰まっていて、zshを使用している場合は、とにかく試してみる価値があります。
user_1とuser_2にフォークを作成します(「&」を使用)。それらは、「ロックファイル」(セマフォ)を使用して(クライアントサーバーと同様に)通信する必要があります。たとえば、user_1が何かを実行し、user_2がチェックしているのは「ロックファイル」がwhile...sleepループに存在する場合です。
ばかげているかもしれませんが、
ssh user@localhost
エンドキーを使用できます
ルートとして実行できます。危険に聞こえますか?注意して、各コマンドの前に su を付けて、次のようにユーザー名を追加しないと、そうではありません。
su -c 'script1' user_1 && su -c 'script2' user_2
これにより、(root として開始すると仮定して) script1 を実行する前にユーザーが user_1 に変更され、次に root に戻り、user_2 に変更されて script2 が実行されます。複数のパスワードを要求する必要はありません。
sshを使用して問題を解決しました。user_1 の認証キーを生成し、user2 に公開しました。パスワードはもう必要ありません。
ssh -l user_1 hostname "command_1; command_2"