执行sudo和chmod命令的bash脚本无法正常工作



我正在尝试创建一个bash脚本,该脚本从用户执行sudo -s命令开始。

这是我的脚本:

#!/bin/bash
SSH_USER=testuser
SUDO_PASSWD=secretpassword
FILE=/www/a/logs/service.log
MACHINES=( 'machine1' );
for HOST in ${MACHINES[@]}; do
    ssh -t -l "$SSH_USER" "$HOST" "echo '$SUDO_PASSWD' | sudo -Ss chmod 777 $FILE"
done

我觉得这个脚本不应该提示我获取密码,但确实如此。我不想输入30个不同时间的密码。我尝试了多个版本,将密码硬编码到脚本中,但仍会提示输入密码。请帮帮我。我非常擅长创建Bash脚本,需要一些认真的指导。

您拥有的想法永远不会起作用,因为sudo(1)除非是终端,否则不会从标准输入中读取密码。将密码用于脚本也是非常糟糕的主意,正如评论中反复指出的那样。

如果您真的想实现这一目标(我建议反对),则应在目标计算机中进行编辑/etc/sudoers,以便您运行sudo(1),而无需它要求密码,而无需密码就可以完成的事情。为此,您不应该让自己在没有密码的情况下运行任何 chmod命令行,而是在目标计算机中创建一个脚本(例如´/usr/local/local/bin/do-my-my-promiscous-chmod`)然后告诉sudo让您仅在不询问密码的情况下运行该脚本。

例如,将以下内容添加到/etc/sudoers将让用户" foo"运行/usr/local/sbin/do-unsafe,而无需密码,并且具有根特权:

foo ALL = (root) NOPASSWD: /usr/local/sbin/do-unsafe

同意萨米人,在脚本中没有硬编码密码。

更多建议。

如果脚本不需要作为root运行,并且可以由其他应用程序管理帐户(例如DBA)运行,则应仅提名该用户以限制权限,例如:

foo ALL = (dba) NOPASSWD: /usr/local/sbin/do-unsafe

其次,不要给任何具有777权限的文件,这是不安全的。考虑其他一些方式,例如ACL许可集。

chmod 777 $FILE

最新更新