忙しい日には、走りたいです
$ ./configure && make && Sudo make install && halt
アプリケーションが自動的にインストールされることを願って、夜間に寝る。しかし、翌日に表示されるのは、Sudoがパスワードを要求する画面です。では、どのようにして1つのコマンドラインでパスワードを指定してSudoを実行することができますか、またはこれを行うための他の方法はありますか?
はい、STDINからパスワードを読み取る-S
スイッチを使用します。
$echo <password> | Sudo -S <command>
だからあなたの場合は、このようになります。
$./configure && make && echo <password> | Sudo -S make install && halt
<password>
をあなたのパスワードに置き換えてください。
あなたはこれであなたのコマンドラインを置き換えることができます:
$Sudo su
$./configure && make && make install && halt
すぐにパスワードの入力を求められたら、残りのコマンドはスーパーユーザーとして実行されます。
他の解決策のいくつかは不必要に./configure
とmake
をrootとして実行するという欠点があります。
これは少し複雑ですが、うまくいくはずです。
Sudo sh -c "su $USER -c ./configure && su $USER -c make && make install && halt"
$USER
を(非root)シェルで拡張できるようにするために二重引用符を使用していることに注意してください。
halt
コマンドの前にsleep 60
を追加することもできます。私はコマンドが長い間実行されることを期待して、このようなことをすることがありましたが、何かがおかしくなってすぐに終了します。 sleep
はシステムがシャットダウンする前にコマンドを殺すことを可能にします。あるいはshutdown
をtime引数とともに使用することもできます。
ユーザーがパスワードなしでSudoとしてmakeを使用できるようにするためにvisudo
を使用してSudoを設定することもできます。
User_Alias USERS = your_user
Cmnd_Alias CMDS = /usr/bin/make
USERS ALL = (ALL) NOPASSWD: CMDS
HISTIGNOREを "Sudo -S"に設定します。
$ export HISTIGNORE='*Sudo -S*'
次に、パスワードをSudoに安全に渡します。
$ echo "your_password" | Sudo -S -k <command>
"HISTIGNORE"は、このコマンドを履歴に保存しないことを意味します。それはメモリ内の履歴または "〜/ .bash_history"ファイルです。
たとえば、以下はパスワードの履歴を保持せずに、あなたのパスワードを安全にSudoコマンドに送ります。
「-S」は、パスワードに標準入力を使用することを意味します。
「-k」は、Sudoに常に尋ねるようにキャッシュされた資格情報を無視することを意味します。これは一貫した動作のためです。
$ export HISTIGNORE='*Sudo -S*'
$ echo "<your_password>" | Sudo -S -k whoami
$ echo "<your_password>" | Sudo -S -k cat /etc/shadow
$ echo "<your_password>" | Sudo -S -k bash /tmp/myscript.sh
上記の方法の欠点は、後で履歴で実行したコマンドを表示したい場合、それらが表示されないことです。もう1つの方法は、Sudo認証資格情報キャッシュを更新し(デフォルトは5分のタイムアウトで有効になっている)、Sudoを個別に実行することです。しかし、この欠点は、5分間のキャッシュに注意する必要があるということです。
例えば:
$ export HISTIGNORE='*Sudo -S*'
$ echo "<your_password>" | Sudo -S -v
$ Sudo whoami
$ echo "<your_password>" | Sudo -S -v
$ Sudo cat /etc/shadow
$ echo "<your_password>" | Sudo -S -v
$ Sudo /tmp/myscript.sh
注デフォルトは5分であるため、Sudoキャッシュが確実に更新されるように、各コマンドの前にSudoを実行しました。はい、whoamiは5分かかるべきではありませんが、一貫性を保つために各コマンドの前に実行することもお勧めします。 〜/ .bashrcファイルに "export HISTIGNORE = 'Sudo -S'"を入れて、それを "。〜/ .bashrc"でロードすることもできます。 "またはログオフしてからログインしてください。ただし、これをスクリプトの目的で使用することを検討しているので、最高のセキュリティ対策のために、これをすべてのスクリプトの先頭に置いておきます。代わりに "echo" "| Sudo -S -v"を変数に設定するのもいい考えかもしれません。そして、root権限を必要とする各コマンドの前に変数を実行するだけです。Janarのコメントを見てください。 "John T"のコメントには、 " - k"を付けずに "Sudo -S"を実行し、Sudo認証キャッシュにすでに資格情報があるように、 " - k"パラメータを含める必要があります。 5分)それからbashは代わりにコマンドとしてあなたのパスワードを実行するでしょう、それは悪いことです。
これもできます。
Sudo -S <<< "password" command
注:私は、このメソッドが古いバージョンのSudo、特に "Sudo version 1.6.7p5"では動作しないことを発見しました。
$ echo "<your_password>" | Sudo -S -k whoami
この方法は、古いバージョンと新しいバージョンのSudoでうまくいきます。
$ echo "<your_password>" | Sudo -S -v
$ Sudo whoami
もっと注意が必要な場合は、スクリプトを作成し、ファイルの権限を変更して、rootだけが読み取りと編集を行ってから実行することができます。
例:
1)ファイルを作成します。
gedit ~/.easy.install
2)これを貼り付けて保存します。
./configure && make && echo <password> | Sudo -S make install && halt
3)実行可能にします。
Sudo chmod +x ~/.easy.install
4)rootだけがそれを読み、編集できるようにファイルのパーミッションを変更します。
Sudo chmod 700 ~/.easy.install
5)実行:
~/.easy.install
楽しい ;-)
Sudoがあなたのアカウントにパスワードを必要としないという事実を誰かが見たことがあるならば、そのようにSudoを設定することは危険です。自分のしていることが分からない限り、そうしないでください。私の実験用コンピュータを使って、私の地元のA +トレーニングプログラムで何度もそれを起こしていたのですが…。
John T.が言ったことは、Shellの歴史の中でパスワードを見つける危険性がまだあることを除けば、良いように思えます。 CarlFが言ったことはよく聞こえますが、1つのコマンドが失敗しても、コンピュータはスーパーユーザー特権で実行されます。
問題は解決しました。たとえば、rootユーザーには次のように入力します。
echo -e 'password\npassword\n' | Sudo passwd root
個人的には、John Tが2009年11月9日の2:47に回答したのと全く同じことをしています。彼の回答の指導に従って私の能力も向上しました、ありがとう。
違いは、私は変数を利用する傾向があるということです。
AutoSuDo=$" $echo pass | Sudo -S";
# Change AutoSuDo to something else.
# Note that string starts with space,
# useful only if used as first command in line
そのようにして私はSudoの代わりに私の変数を簡単に使うことができます、
$AutoSuDo apt-get update;
これはもっと長いスクリプトではとても便利です。私は主に私が維持しなければならない他人のパソコンのためにこれらを利用します。
私はまた注意を払うことをお勧めします: