シェルスクリプトでパスワードを使用する方法

シェルスクリプトでパスワードを使用する方法

3つのログファイルから複数のファイルを検索するスクリプトを作成しています。ログファイルの1つがスーパーユーザーとして作成され、実行されるたびにパスワードの入力を求められます。毎回パスワードを入力する必要がないように、これを同じスクリプトに入れることはできますか?

for ...
su superuser -c "grep $file /u/spool/ftp/logs/alog>> /u/home/abc/tempo/files.txt"
if [ $? -eq 0 ]; 
   then 
       echo $file >> /u/home/abc/tempo/ftpxfer.txt;
   fi
 done

答え1

まず、ファイル(特にユーザー所有スクリプト)にスーパーユーザーパスワードを設定するのはとても悪い考え、そのユーザーへのアクセス権を取得した人は誰でも簡単にroot権限を取得できるからです。

つまり、sudoパイプからパスワードを読み取るオプションを提供するスクリプトで使用できます。

pass='1234abc'
for ... 
    echo $pass | sudo -S "grep $file /u/spool/ftp/logs/alog>> /u/home/abc/tempo/files.txt"
    if [ $? -eq 0 ]; then
        echo $file >> /u/home/abc/tempo/ftpxfer.txt
    fi
done

sudoあるいは、-configure sudo(root / superuser)を使用して、rootにスクリプト全体を実行させることもできます。visudoこれにより、sudo設定ファイルに次のものを追加して、パスワードなしでスクリプトを実行できます。

%wheel ALL=(ALL) NOPASSWD: /path/to/script

これにより、次のようにスクリプトを簡素化できます(通常のテキストパスワードは必要ありません)。

for ... 
    grep $file /u/spool/ftp/logs/alog>> /u/home/abc/tempo/files.txt
    if [ $? -eq 0 ]; then
        echo $file >> /u/home/abc/tempo/ftpxfer.txt
    fi
done

答え2

ルートパスワードを知っている場合

ssh-keygen
ssh-copy-id root@localhost
  • ssh-keygenのデフォルト値を受け入れ、passwdと入力しないでください。
  • 必要に応じて、ルートを正しいユーザーに置き換えます。

その後、スクリプトからsussh root@localhost

答え3

@wraethが彼の答えで危険だと指摘したように、彼の提案は最善のアプローチになるでしょうが、次のものを使用することもできます.予想される

セキュリティの問題を念頭に置いている場合は、このような状況に役立つインタラクティブなスクリプト回答を作成できます。また、スーパーユーザーのパスワードがある場合は、sudoersファイルに自分自身を追加し、パスワードを必要とせずに権限でスクリプトを実行するように設定できます。

関連情報