[英]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.