質問
私のシェルスクリプト(bashの場合)を呼びたいその他のシェルのイントロダクションです。
い私のスクリプトとしてuser_A.これらのスクリプトのニーズを特別な取り扱い:
- で実行し、異なるユーザー (user_B).パスワードが必要です。
- では、インタラクティだが、そう 質問が行うスクリプト 名前の別のユーザー(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
を使用することをお勧めします。そのスクリプトの相互作用のために設計されています。