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

时间:2014-01-18 23:07:46

标签: linux bash shell

我正在尝试创建一个以执行sudo -s命令的用户开头的bash脚本。

这是我的剧本:

#!/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脚本方面非常陌生,需要一些认真的指导。

2 个答案:

答案 0 :(得分:2)

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

如果您真的希望实现这一目标(我建议不要这样做),您应该在目标计算机上编辑/etc/sudoers,让您运行sudo(1),而不需要输入密码来查找需要的内容没有密码完成。为此,你不应该让自己在没有密码的情况下运行任何 chmod命令行,而是在目标机器中创建一个脚本(例如'/ usr / local / bin / do-my-promiscuous-chmod`然后告诉sudo让你只运行该脚本而不需要密码。

例如,将以下内容添加到/etc/sudoers会让用户“foo”在没有密码且具有root权限的情况下运行/usr/local/sbin/do-unsafe

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

答案 1 :(得分:0)

同意Sami,脚本中没有硬编码密码。

更多建议。

如果脚本不需要以root身份运行,并且可以由某个其他应用程序管理员帐户(如DBA)运行,则应该指定该用户仅限制权限,例如:

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

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

chmod 777 $FILE