インタラクティブシェルスクリプトの名称その他のユーザー

StackOverflow https://stackoverflow.com/questions/3628695

  •  26-09-2019
  •  | 
  •  

質問

私のシェルスクリプト(bashの場合)を呼びたいその他のシェルのイントロダクションです。
い私のスクリプトとしてuser_A.これらのスクリプトのニーズを特別な取り扱い:

  1. で実行し、異なるユーザー (user_B).パスワードが必要です。
  2. では、インタラクティだが、そう 質問が行うスクリプト 名前の別のユーザー(user_C) su.うれしいパスワードを入力してこちら しています。

利用できまsuこのスクリプトがその問いに答えることのなかのどこかにあるのですね。私は入ることのできないもので版画を各questons"stty::なタイプライター"

私は呼び出しは特別なスクリプトこのように

su user_B << ABC
...
special_script
...
ABC
役に立ちましたか?

解決

#!/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人のユーザーのために働く、だから今「の場合...」を加える第二のユーザのための

他のヒント

は、他のユーザーとしてスクリプトを実行するための別のオプションは、「sudoを」コマンドである、と考える「を実行スーパユーザ:」読みやすさのために。 -uパラメータには、ユーザー名の情報を提供します。だから、ます:

sudo -u user_B special_script

User_Bへのパスワードを入力するように求められます。私はそれを使用して対話型プログラムを実行しているとの問題を抱えていたことがありません。あなたはvisudoをコマンド経由で誰にsudoのできる人を管理することができます。

あなたはsudoを使用して、ユーザAがUser_Bへとスクリプトを実行することを可能にするsudoersファイルを作成することができます。

のような行:

user_A      ALL = (user_B) NOPASSWD: /usr/share/stuff/ABC
USER_Aのような何かを行うことができるようになる。

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

パスワードを求めず

端末からパスワードを取得するには、

su試み、それがキーエコーをオフにするioctlを呼び出すことができますので、ttyデバイスを必要とします。標準入力が「ここに文書」(ABC)から来ているので、ファイルディスクリプタに0利回り「ではないのttyを」のioctlを呼び出そうとします。

あなたは、代わりにの善意のスクリプトを文書化し、ここで使用しなければならない場合:

cat > /tmp/myscript.$$ <<ABC
#!/bin/sh
...
ABC
chmod +x /tmp/myscript.$$
sudo -u user_B /tmp/myscript.$$

あなたはexpectを使用することをお勧めします。そのスクリプトの相互作用のために設計されています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top