如何在 shell 脚本中使用密码

如何在 shell 脚本中使用密码

我正在编写一个脚本,用于从 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 文件中,并将其设置为以特权运行脚本,无需密码。

相关内容