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