繁体   English   中英

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

[英]bash script executing sudo and chmod command not working properly

我正在尝试创建一个以执行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脚本方面非常陌生,需要一些认真的指导。

你在那里的想法永远不会起作用,因为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

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

更多建议。

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

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

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

chmod 777 $FILE

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM