2011-12-14 1 views
0

をMacにインストールする シェルスクリプトを作って、パスワードを入力して、スクリプトが後でそれを使用して自動的にパスワードを入力することで無人インストールできるようにします"sudo"コマンドで。これは私が今に持っているものです:シェルスクリプトでsudoのパスワードを覚えている

clear 
echo Wine Installer v1.0 
echo ------------------- 
echo  by Sydcul 
sleep 4 
clear 
    echo "Please enter your OS X user password." 
    echo "It is needed in some parts of the installation." 
    read PASSWORD 
    echo "Wine installation starting." 
    echo "Please do not shut down your system." 
    mkdir winetmp 
    cd winetmp 
    curl -O https://distfiles.macports.org/MacPorts/MacPorts-2.0.3.tar.bz2 
    tar xjvf MacPorts-2.0.3.tar.bz2 
    cd MacPorts-2.0.3 
    echo $PASSWORD | ./configure && make && sudo make install 
    echo $PASSWORD | sudo port -v selfupdate 
    echo $PASSWORD | sudo port -v install xorg 
    echo $PASSWORD | sudo port -v install wine 
    rm -rf ~/winetmp 
    clear 
    echo "Wine is successfully installed and ready for use!" 

しかし、ある時点でまだパスワードを要求しています。 これをどのように修正できますか?

答えて

1

初めてパスワードを入力するように求めてから、ファイルに保存することができます(暗号化も忘れないでください)。

あなたは簡単に同じファイルからそれを読んで、変数に格納し、その後

echo $variablename | sudo -S command

+0

私はすでに変数に格納しようとしたため動作しませんでしたので、これは機能しません。 – Sydcul

+0

これはうまくいきませんか?エコーを混乱させる特別な文字がないことを確認するために変数を引用する必要があるかもしれません。 – dannysauer

+1

いずれにせよ、これは悪い考えです。 "echo"コマンドがプロセスツリーに一時的に表示され、潜在的にパスワードが漏洩する可能性があるからです。 – dannysauer

0

このコマンドを使用することができ、それを必要とする次の時間は、実際に私はsudoがからパスワードを受け付けないと思いますstdin(これを有効にするには-Sパラメータを指定する必要があります)。 回避策として、sudo suを実行してすべてのコマンドのroot権限を得ることができます。

UPD:セキュリティポイントからの非常に悪い解決策であるため、パスワードをファイルに保存することはお勧めできません。

UPD2:それがインストールされていない場合、このスクリプトは、コンパイルステージに失敗し、Xcodeのを忘れる:)

2

正直なところ、私はすべてのこと$PASSWORDものをドロップすると、すべてのコマンドからsudoを削除します。昇格された権限で実行する必要があるインストールスクリプトを作成しています。ユーザーにsudo ./installwine.shでスクリプトを実行させてから、sudoを使わずにスクリプトでコマンドを実行します。 port -vのものはすべて昇格された特権を継承します。

最初にportを呼び出すだけではなく、sudoでスクリプトを実行するのを忘れると、ユーザーに素晴らしいエラーメッセージを表示したい場合は、有効なユーザーID ($EUID)が0で、エラーメッセージを出力し、それ以外の場合は終了します。 https://askubuntu.com/questions/30148/how-can-i-determine-whether-a-shellscript-runs-as-root-or-notを参照してください。

+0

それは素晴らしいアイデアですが、私はそれをダブルクリックアンドゴーのアプリケーションにすることでn00bを証明する必要があると思います。私は 'sudo su'というアイディアを使用しようとします。しかし、返信いただきありがとうございます! – Sydcul

0

sudoのカスタムプロンプトオプションを使用して、必要な場合にパスワードを聞かせてみませんか?

彼らはすでにルートだか、このようにしない場合は、チェックすることで起動します。-pオプションを使用してsudoのプロンプトをカスタマイズする機能であることを組み合わせて、必要に応じて、その後

SUDO="" 
if [[ 0 == $(id -u) ]] 
then 
    SUDO="sudo " 
fi 
$SUDO command 1 
$SUDO command arg arg arg 

をして。

then 
    SUDO="sudo -p \"I need elevated access for this part. Please enter %u's password:\" " 
fi 

あなたはまだインターフェイスを制御できますが、必要がない限りパスワードを要求しません。例えば、一部の人は、ノーパワード操作のためにsudoをセットアップすることができます。インストーラをrootとして実行する人もいます。あるいは、そのパスワードが既にsudoでキャッシュされているかもしれません。その他sudoがプロンプトを管理できるようにするのが最善です。必要に応じてaskpassプログラムを使用することもできます(-Aオプションを参照)。

関連する問題