我需要在 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
。
- 创建一个文件,比如说
pass
。 - 使该文件仅对您可访问:
chmod go-rwx pass
。 - 使其对你可执行:
chmod u+x pass
编辑该文件并使其成为打印密码的脚本:
#!/bin/sh printf '%s\n' 'yourpassword'
现在你可以这样做:
SUDO_ASKPASS="./pass" sudo -A su - someuser
注意:在这种情况下,您提供的是sudo
(而不是的su
)密码;使用您sudo
想要的密码。
答案3
您可以使用:NOPASSWD
sudo 选项,这样就不需要密码了。例如:
%wheel ALL=(ALL) NOPASSWD: ALL
在 /etc/sudoers 中