shell – sudoでパスワードを1つのコマンドラインで?

shell sudo

忙しい日は走りたくなる

$ ./configure && make && sudo make install && halt

を夜に起動して、アプリが自動的にインストールされることを期待して就寝。しかし、次の日に見たのはsudoでパスワードを聞かれる画面です。そこで、コマンドライン一本でパスワードを入力してsudoを実行するにはどうしたらいいのか、他にも方法があるのでしょうか?

  145  Jichao  2009-11-09


ベストアンサー

はい、STDINからパスワードを読み込む-Sスイッチを使用します

$echo <password> | sudo -S <command>

あなたの場合は、次のようになります

$./configure && make && echo <password> | sudo -S make install && halt

もちろん、<password>をパスワードに置き換えてください

219  John T  2009-11-09


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

上記の方法の欠点は、後で履歴に実行したコマンドを見たい場合、それらはそこにはありません。もう一つの方法は、sudo認証のクレデンシャルキャッシュ(デフォルトは5分のタイムアウトで有効になっています)を更新してから、別途sudoを実行するという方法です。しかし、これの欠点は、5分キャッシュを意識する必要があるということです

For example:

$ 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” を変数に設定するのも良いアイデアかもしれません。”John T” のコメントには “-k” パラメータも含まれているはずです。”sudo -S” を “-k” なしで実行した場合、sudo 認証キャッシュにはすでにあなたの認証情報が入っています (そしてまだ有効です。デフォルトの sudo 認証キャッシュは 5 分です)

15  user393365  2014-11-25


また、visudoでsudoを設定して、パスワードなしでmakeをsudoとして使用できるようにすることもできます

User_Alias USERS = your_user
Cmnd_Alias CMDS = /usr/bin/make
USERS ALL = (ALL) NOPASSWD: CMDS

11  Natim  2009-11-09


コマンドラインをこのように置き換えることができます

$sudo su

$./configure && make && make install && halt

すぐにパスワードの入力を求められ、残りのコマンドはスーパーユーザとして実行されます

10  CarlF  2009-11-09


他のいくつかの解決策は、不必要に./configuremakeをrootとして実行してしまうという欠点があります

少し複雑だが、うまくいくはずだ

sudo sh -c "su $USER -c ./configure && su $USER -c make && make install && halt"

$USER を (root ではない) シェルで展開できるようにするために、二重引用符を使うことに注意してください

また、haltコマンドの前にsleep 60を追加してもいいかもしれません。私は時々このようなことをしたことがあり、コマンドが長時間実行されることを期待していたのですが、何か問題が起きてすぐに終了してしまいます。あるいは、shutdownに時間を指定して使うこともできます

10  Keith Thompson  2012-08-08


こんなこともできるんですね

sudo -S <<< "password" command

7  Jahid  2015-06-09


注:私はその方法が古いバージョンの sudo、具体的には “sudo バージョン 1.6.7p5” で動作しないことを発見しました

$ echo "<your_password>" | sudo -S -k whoami

この方法は古いバージョンと新しいバージョンのsudoで動作します

$ echo "<your_password>" | sudo -S -v
$ sudo whoami

4  Darren DeHaven  2014-12-08


もっと気をつけたいなら、スクリプトを作って、ファイルのパーミッションを変更して、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) Run:

~/.easy.install

Enjoy 😉

2  desgua  2011-04-19


そのようにsudoを設定するのは、もし誰かがsudoがあなたのアカウントにパスワードを要求しないという事実をたまたま見てしまったら危険です。あなたが何をしているかを知っていない限り、それをしないでください。私の地元のA+トレーニングプログラムでは、実験用のパソコンで何度も同じことが起こっています…。-_-

John T. の言うことは良いと思いますが、シェルの履歴からパスワードを見つけるリスクがあることを除けば。CarlFが言ったことは良いように聞こえるが、もし一つのコマンドが失敗しても、コンピュータはスーパーユーザ権限で実行されていることになる

1  TimE.  2010-11-10


個人的に私はかなりのジョンTが11月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;

これは、いくつかの長いスクリプトで非常に便利です。私は主に、自分がメンテナンスしなければならない他人のパソコンのためにこれらを使用しています

にも注目することをお勧めします

  • desgua 回答 on Apr 19 ’11 at 23:56
  • ユーザー224306コメント5月14 ’13で17:38のジョンTの答えのために11月9 ’09 2:47で

0  Janar  2014-06-29


問題は解決しています。例えば、ユーザールートに

echo -e 'password\npassword\n' | sudo passwd root

0  Jerson Martínez  2018-11-08


タイトルとURLをコピーしました