如何直接向 sudo su 提供密码 -在 shell 脚本中

如何直接向 sudo su 提供密码 -在 shell 脚本中

我需要在 shell 脚本中自动输入sudo su -<someuser>密码。

如何在 IBM AIX 服务器的 shell 脚本中直接向 sudo su 提供密码。我试过使用 echo <password> | sudo su -<someuser>它,但没有用。请帮忙。

答案1

使用-S

man sudo

-S, --stdin 将提示写入标准错误并从标准输入读取密码,而不是使用终端设备。密码后面必须跟换行符。

因此你可以使用:

echo <myPassword> | sudo -S su <someuser>

编辑:上面的方法在测试版 Ubuntu 上不起作用。似乎在提示密码查询后,第二个命令“su”太快了。

我采取了一种解决方法,等待一秒钟,以便可以填写回显的密码,然后第二个 sudo 应该能够运行sudo su - foobar

echo "password" | sudo -S sleep 1 && sudo su - foobar

答案2

expect。 A存根命令可能是这样的:

expect -c '
 log_user 0
 spawn /usr/bin/sudo su - someuser
 expect "*: "
 send "thepassword\n"
 interact
'

这个答案回答类似的问题。


另一种方法是使用sudo -A

  1. 创建一个文件,比如说pass
  2. 使该文件仅对您可访问:chmod go-rwx pass
  3. 使其对你可执行:chmod u+x pass
  4. 编辑该文件并使其成为打印密码的脚本:

    #!/bin/sh
    printf '%s\n' 'yourpassword'
    
  5. 现在你可以这样做:

    SUDO_ASKPASS="./pass" sudo -A su - someuser
    

注意:在这种情况下,您提供的是sudo(而不是的su)密码;使用您sudo想要的密码。

答案3

您可以使用:NOPASSWDsudo 选项,这样就不需要密码了。例如: %wheel ALL=(ALL) NOPASSWD: ALL在 /etc/sudoers 中

相关内容