我正在编写一个脚本,用于从 3 个日志文件中查找多个文件。其中一个日志文件是作为超级用户创建的,每次执行时都会提示输入密码。我如何将其放在相同的脚本中,这样我就不必每次都输入密码。
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/超级用户身份使用)让 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
如果您知道 root 密码
ssh-keygen
ssh-copy-id root@localhost
- 接受 ssh-keygen 的默认值,不输入 passwd。
- 如果需要,请将 root 替换为正确的用户。
然后在脚本中替换su
为。ssh root@localhost
答案3
正如 @wraeth 在他的回答中指出的那样危险,他的建议将是最好的方法,但你也可以使用预计。
它允许您编写交互式脚本的答案,如果您考虑到安全问题,那么对于这种情况非常有用。另外,如果您有超级用户密码,您可以将自己添加到 sudoers 文件中,并将其设置为以特权运行脚本,无需密码。