嗨我正在从shell脚本执行 SUDO 并从hereDOC获取指令。但我想知道我做得正确或更安全。它有时锁定我的帐户(当我试图改变路径时)我不知道为什么。
#!/bin/bash
# set the STRING variable
path=/u/siebel/abcdef/sie/sieb/
echo abcd | sudo -S /usr/bin/su - abcdef << EOF
crontab -l > cronbackup1.txt
#ls -lrt
cd "$path"
ls -lrt
EOF
以上脚本刚刚锁定了我的帐户。但是当我在没有cd
的情况下执行它时它工作正常。这次它提示我自己错误密码3次,因为我做./testing.sh
并且被锁定可以解释一下为什么它运行3次但脚本中没有循环?
这是我在设置cd&#34; $ path&#34;。
之后得到的Password: Sorry, try again.
Password: Sorry, try again.
Password: Sorry, try again.
sudo: 3 incorrect password attempts
对于相同的密码,crontab工作正常。
答案 0 :(得分:1)
当你这样做时:
somecmd | cmd << EOF
...
EOF
stdin
的{{1}}将是here-document的内容,
并且不会读取来自管道的任何内容。
cmd
的{{1}}将被关闭而不会从中读取任何内容。
因此,您的示例中发生的事情是stdout
尝试从here-document读取密码,而不是您尝试传递给它的somecmd
。
换句话说,您无法向sudo
提供密码,同时将here-document传递给它的shell。
你可以做的是分开这两个动作,
利用echo
的超时选项。
也就是说,一旦您成功使用sudo
,
它会记住你认证状态一段时间,
以及之后对sudo
的调用不会再次要求输入密码。
sudo
但我建议你不要这样做。
在shell中以明文形式传递密码,
特别是在脚本中安全性很差。
最好创建一个专用脚本来执行其他用户帐户所需的操作,并适当地配置sudo
。