コマンドライン一本でパスワード付きのsudo?
忙しい日は、夜に
$ ./configure && make && sudo make install && halt
を実行して、自動でアプリがインストールされることを期待して就寝したい。しかし、次の日に見たのは、sudoがパスワードを聞く画面。そこで、コマンドライン一本でパスワードを入力してsudoを実行する方法、他に何か方法はないでしょうか?
忙しい日は、夜に
$ ./configure && make && sudo make install && halt
を実行して、自動でアプリがインストールされることを期待して就寝したい。しかし、次の日に見たのは、sudoがパスワードを聞く画面。そこで、コマンドライン一本でパスワードを入力してsudoを実行する方法、他に何か方法はないでしょうか?
他のいくつかの解決策は、不必要に ./configure
と make
を root として実行してしまうという欠点があります。
これは少し複雑ですが、動作するはずです。
sudo sh -c "su $USER -c ./configure && su $USER -c make && make install && halt"
二重引用符の使用に注意してください。私は時々このようなことをしていて、コマンドが長時間実行されることを期待していたのですが、何か問題が起きてすぐに終了してしまうことがありました。または、$USER
に時間引数を付けて使うこともできます。
HISTIGNORE を “sudo -S” に設定
$ export HISTIGNORE='*sudo -S*'
そしてパスワードを安全に sudo に渡す:
$ echo "your_password" | sudo -S -k <command>
“HISTIGNORE” とは、このコマンドを履歴に保存しないという意味です。それはメモリ内の履歴か"~/.bash_history “ファイルです。
$ 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
$ 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
&001
"HISTIGNORE "は、このコマンドを履歴に保存しないという意味です。これは一貫した動作のためのものです。
&001
上記の方法の欠点は、後で履歴に実行したコマンドを見たい場合、彼らはそこにはないということです。もう一つの方法は、sudo認証のクレデンシャルキャッシュ(デフォルトは5分のタイムアウトで有効になっています)を更新してから、sudoを個別に実行することです。しかし、これの欠点は、5分キャッシュを意識する必要があるということです。
例:
&001
注意 私はデフォルトが5分タイムアウトなので、sudoキャッシュが更新されていることを確認するために、各コマンドの前にsudoを実行しました。はい、whoamiは5分を取るべきではありませんが、私は一貫性のために各コマンドの前に実行させることができるかもしれないと考えています。また、~/.bashrc ファイルに "export HISTIGNORE=‘sudo -S’” と書いて、". ~/.bashrc」で読み込むか、ログオフしてからログインするという方法もあります。ただ、これはスクリプトで使うことを考えているので、セキュリティ対策のためにもスクリプトの一番上に置いておこうと思います。echo “” | sudo -S -v" を変数に設定するのも良いアイデアかもしれません。"John T" のコメントには “-k” パラメータも含まれているはずです。"sudo -S" を “-k” なしで実行した場合、sudo 認証キャッシュにはすでにあなたの認証情報が入っています (そしてまだ有効です。デフォルトの sudo 認証キャッシュは 5 分です)。
注意してください、私はそのメソッドは、具体的には “Sudoバージョン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)ルートだけがそれを読んで編集できるようにファイルの権限を変更:
sudo chmod 700 ~/.easy.install
5)実行:
~/.easy.install
お楽しみください ;-)
そのようにsudoを設定するのは、もし誰かがsudoがあなたのアカウントにパスワードを必要としないという事実を偶然見てしまったら危険です。あなたが何をしているかを知っていない限り、それをしないでください。私は、地元のA+トレーニングプログラムで、私の実験的なコンピュータでそれが起こったことがありました。-\ジョン・Tの言うことはいいと思うけど、シェルの履歴からパスワードを見つける危険性があることを除けばね。CarlFが言ったことは良いと思うけど、もしコマンドが一つ失敗しても、コンピュータはスーパーユーザ権限で動いていることになる。
問題は解決されています。例えば、ユーザールートに:
echo -e 'password\npassword\n' | sudo passwd root
個人的に私はJohn TがNov 9 ‘09の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;
それはいくつかの長いスクリプトで非常に便利になります。私は主に私が維持しなければならないことを、他の人のパーソナルコンピュータのためにこれらを使用することを確認します。
私はまた、上で注意を払うことをお勧めします: