我有一个脚本:
read -s -p "Enter your password to use in script: " PASSWORD
echo -e $PASSWORD | sudo -S brew cask install junk
echo "Done Installing junk, running step 1..."
./step1.sh
echo -e $PASSWORD | sudo -S some-other-command
显然$ pASSWORD在step1.sh中将为空,通常你导出一个变量以在它调用的其他脚本中全局使用:
export PASSWORD
或者你可以将它用作脚本参数:
read -s -p "Enter your password to use in script: " PASSWORD
echo -e $PASSWORD | sudo -S brew cask install junk
echo "Done Installing junk, running step 1..."
./step1.sh $PASSWORD
echo -e $1 | sudo -S some-other-command
我假设使用导出的第一个示例从安全角度来看并不是一个好主意(但是,我不确定)。第二个可用且安全吗?此外,如果没有,有没有更好的方法来做到这一点,而不依赖于sudo缓存密码(我有一大堆脚本需要时间执行,缓存可能会超时,我希望整个脚本无人值守)?
答案 0 :(得分:1)
不要以明文形式发送/使用密码。
将第一个脚本作为sudo first.sh
运行,然后在脚本中执行所有权限删除(如果需要),然后从第一个脚本中正常调用第二个脚本。
答案 1 :(得分:0)
以纯文本格式存储密码绝不是一个好主意;特别是在脚本文件中,可能会与其他用户共享。
但如果你必须以非交互方式使用sudo,你可以试试这个:
read -s -p "Enter your password to use in script: " PASSWORD
export SUDO_ASKPASS=`mktemp -p ~`
cat > $SUDO_ASKPASS <<SUDO_ASKPASS_EOF
#!/bin/bash
cat <<EOF
$PASSWORD
EOF
SUDO_ASKPASS_EOF
chmod 500 $SUDO_ASKPASS
sudo -A -S brew cask install junk # Notice the additional `-A`
./step1.sh
# Any more commands as required...
rm $SUDO_ASKPASS
同样,在-A
中的sudo
进一步step1.sh
次调用中添加[ref observeEventType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot) {...}