如何使用BASH脚本存储用户密码并在其调用的脚本中访问它

时间:2016-04-25 06:32:22

标签: bash shell security passwords

我有一个脚本:

setup.sh

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

step1.sh

echo -e $PASSWORD | sudo -S some-other-command

显然$ pASSWORD在step1.sh中将为空,通常你导出一个变量以在它调用的其他脚本中全局使用:

export PASSWORD

或者你可以将它用作脚本参数:

setup.sh

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

step1.sh

echo -e $1 | sudo -S some-other-command

我假设使用导出的第一个示例从安全角度来看并不是一个好主意(但是,我不确定)。第二个可用且安全吗?此外,如果没有,有没有更好的方法来做到这一点,而不依赖于sudo缓存密码(我有一大堆脚本需要时间执行,缓存可能会超时,我希望整个脚本无人值守)?

2 个答案:

答案 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) {...}