2012-05-15 21 views
6

を実行したとき、私は言ってスクリプトを持っている場合は、言う:自動的に入力パスワードbashスクリプトは、例えば

#!/bin/bash 
sudo setpci -s 00:02.0 F4.B=00 

それは時にパスワードとしてそれを受け入れるように、私はスクリプトにrootのパスワードを入れるにはどうすればよいですそれはsudo行を読み込んで実行するので(手動で入力する必要はありません)

答えて

24

bashスクリプト内でexpectセッションを起動するのは、通常、対話型のプロンプトを自動化する方法です。

bashスクリプトでrootパスワードを保存する巨大なセキュリティホールであるとして、これは、この場合に推奨されるアプローチではないことを

expect -c " 
spawn sudo setpci -s 00:02.0 F4.B=00 
expect -nocase \"password:\" {send \"$PASS\r\"; interact} 
" 

注意。

正しい解決策は、/etc/sudoers/を編集して、そのバイナリのパスワードを要求しないようにすることです。

#in /etc/sudoers 
neohexane ALL=(ALL) NOPASSWD : /usr/bin/setpci 
+1

'/ etc/sudoers /'アプローチを使用できない理由はありますか?それが私の推薦です。 – cmh

+3

は推奨されていません。私は、期待のソリューションを完全に削除します。これが彼自身の個人的な箱でない限り、彼は絶対にプレーンテキストファイルの中に横たわっているルートパスワードを残すべきではありません。 – chepner

+2

私はそれが期待をどのように使用するかの例として保つ価値があると思います。私はそれが推奨されていない方法を強調します。 – cmh

関連する問題