
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と入力しないでください。
- 必要に応じて、ルートを正しいユーザーに置き換えます。
その後、スクリプトからsu
。ssh root@localhost
答え3
@wraethが彼の答えで危険だと指摘したように、彼の提案は最善のアプローチになるでしょうが、次のものを使用することもできます.予想される。
セキュリティの問題を念頭に置いている場合は、このような状況に役立つインタラクティブなスクリプト回答を作成できます。また、スーパーユーザーのパスワードがある場合は、sudoersファイルに自分自身を追加し、パスワードを必要とせずに権限でスクリプトを実行するように設定できます。