Linux 执行sudo和chmod命令的bash脚本工作不正常

Linux 执行sudo和chmod命令的bash脚本工作不正常,linux,bash,shell,Linux,Bash,Shell,我试图创建一个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

我试图创建一个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/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

我已尝试修复您的代码格式,但该格式已被破坏。请检查我是否无意中更改了内容。最重要的是:不要硬编码您的根密码!这正是你不应该做的事情,如果你有一点担心安全性。我知道,硬编码我的密码是最终不不,但我需要做这一次。这个脚本不是一个cronjob,它只运行一次。一旦脚本运行,我将删除它的内容。我现在看到错误“[sudo]testuser的密码:与closed的连接但是
chmod
发生了吗?不确定这是否是一个错误。下面的命令对我有效,我输入一个密码-
ssh-l graeme localhost”echo mypassword | sudo-Ss chmod 777 test“
。如果您为stdin提供
-S
选项,Sudo将从stdin读取密码,如问题所示。True。我应该戴上眼镜。谢谢大家的帮助。我决定弄一把钥匙,让这个过程更容易。