我的 shell 脚本(没有 EXPECT,也不可能)运行一个模拟其他用户的 shell 脚本。假设以下脚本名为 ,toto1.sh
并以名为 的用户身份运行MYUSERNAME1
。
#!/bin/sh
su - MYUSERNAME2 ./app/sh/toto2.sh
我的脚本停止了,提示输入密码请求......
我如何发送 的密码MYUSERNAME2
?
答案1
答案2
方法 1-从文件读取
您可以将密码保存在用户的只读文件中,并将内容传递给 sudo 命令。
这将避免密码被存储在 shell 历史记录中
# Save the password in the hidden file
echo "password" > ~/.password
# Update the permissions to allow only the user to read it
chmod 400 ~/.password
# Pass the password over STDIN to sudo
☠ cortex ☠ [~] cat ~/scripts/login_file.sh
cat ~/.password | sudo -S su
# Execute the script
☠ cortex ☠ [~] bash ~/scripts/login_file.sh
[sudo] password for cortex:
☠ cortex ☠ [~]
方法 2 - 保存到临时环境变量
使用这种方法,您需要在 shell 或脚本中输入。
☠ cortex ☠ [~] cat ~/scripts/login.sh
my_password='password' # SET PASSWORD
echo "$my_password" | sudo -S su # INVOKE sudo WITH PASSWORD
与脚本结合
使用上面提到的任何一种方法并进行身份验证,sudo
然后以 root 访问权限调用命令。
☠ cortex ☠ [~] cat ~/scripts/login.sh
# SET PASSWORD
my_password='password'
# INVOKE sudo WITH PASSWORD
echo "$my_password" | sudo -S su;
# INVOKE COMMANDS WITH ROOT ACCESS
sudo -i <<'EOF'
echo "Now i am $(whoami)"
echo "$(id)"
EOF
☠ cortex ☠ [~] bash ~/scripts/login.sh
[sudo] password for cortex: Now i am root
uid=0(root) gid=0(root) groups=0(root)
减少混乱ALIAS
让 sudo 在内部获取密码并进行身份验证。你不需要每次都通过 STDIN 输入密码
# Create the alias with the Approach 1
☠ cortex ☠ [~] echo "alias sudo=\"cat ~/.password | sudo -S\"" >> ~/.bashrc
# OR Create the alias with the Approach 2
☠ cortex ☠ [~] echo "alias sudo=\"echo \"password\" | sudo -S\"" >> ~/.bashrc
# Re-load the environment
☠ cortex ☠ [~] . ~/.bashrc
# Use sudo directly - No need to pass on password everytime
☠ cortex ☠ [~] sudo whoami
root