1

私のシェルスクリプト(bash)で、他のシェルスクリプトを呼び出したいと思います。
スクリプトをuser_Aとして実行します。これらのスクリプトの1つには、特別な処理が必要です。

  1. 別のユーザー(user_B)として実行する必要があります。ここで必要なパスワード。
  2. インタラクティブですが、質問をするだけでなく、suを使用して別のユーザー(user_C)の名前で別のスクリプトを実行します。ここにもパスワードを入力する必要があります。

このスクリプトを呼び出すsuを使用できますが、その質問にはなんらかの方法で回答する必要があります。「stty::タイプライターではない」という質問ごとに印刷されるため、何も入力できません。

私はこのように特別なスクリプトを呼んでいます

su user_B << ABC
...
special_script
...
ABC
4

5 に答える 5

1

他のユーザーとしてスクリプトを実行するためのもう 1 つのオプションは、'sudo' コマンドです。読みやすくするために、'superuser do:' と考えてください。-u パラメータは、ユーザー名情報を提供します。そう:

sudo -u user_B special_script

user_B のパスワードを求めるプロンプトが表示されます。それを使用して対話型プログラムを実行する際に問題が発生したことはありません。visudo コマンドを使用して、誰が誰に sudo できるかを管理できます。

于 2010-09-02T15:40:35.120 に答える
1
#!/bin/bash

main_for_root(){
    :
}
# ------------------------------------------------------------------------------
abs_path="$(readlink -f `dirname $0`)/$(basename $0)"

# if [ `id -u` != 0 ] ; then
if [ `whoami` != 'root' ] ; then
    echo "[su -] run as root"
    su -c"/bin/bash $abs_path $@"
    exit 0
else
    main_for_root $@
fi

1 人のユーザーで機能するため、2 番目のユーザー用に「if ...」を追加します。

于 2010-09-02T18:16:55.163 に答える
0

を使用することをお勧めしますexpect。スクリプト化された対話用に設計されています。

于 2010-09-02T16:31:25.857 に答える
0

su端末からパスワードを取得しようとしますが、ioctlキーのエコーをオフにするために呼び出すことができるように tty デバイスが必要です。標準入力は「ヒアドキュメント」(ABC) から来ているため、ファイル記述子 0 で ioctl を呼び出そうとすると、「tty ではありません」という結果になります。

善意のスクリプトの代わりにヒアドキュメントを使用する必要がある場合は、次のようにします。

cat > /tmp/myscript.$$ <<ABC
#!/bin/sh
...
ABC
chmod +x /tmp/myscript.$$
sudo -u user_B /tmp/myscript.$$
于 2010-09-02T15:45:57.570 に答える
0

sudo を使用して、user_A が user_B としてスクリプトを実行できるようにする sudoers ファイルを作成できます。

次のような行:

user_A      ALL = (user_B) NOPASSWD: /usr/share/stuff/ABC

user_A が次のようなことをできるようにします

sudo -u user_B /usr/share/stuff/ABC

パスワードを聞かずに

于 2010-09-02T15:43:22.833 に答える