Answers:
我会试着猜猜你问的是什么。
如果你想在sudo su - user没有密码的情况下使用,你应该(如果你有权限)在你的sudoers文件上执行以下操作:
<youuser> ALL = NOPASSWD: /bin/su - <otheruser>
哪里:
<yourusername> 你是用户名:D(saumun89,ie)<otheruser> 是您要更改为的用户然后放入脚本:
sudo /bin/su - <otheruser>
这样做,不会让后续命令运行<otheruser>,它会产生一个新的shell。如果要在脚本中以其他用户身份运行另一个命令,则应使用以下命令:
sudo -u <otheruser> <command>
并在sudoers文件中:
<yourusername> ALL = (<otheruser>) NOPASSWD: <command>
显然,更通用的行如:
<yourusername> ALL = (ALL) NOPASSWD: ALL
将事情完成,但会授予任何人做任何事情的许可。
你可以使用命令
echo "your_password" | sudo -S [rest of your parameters for sudo]
(当然没有[和])
请注意,您应该保护您的脚本免受未经授权用户的读取访问。如果要从单独的文件中读取密码,可以使用
sudo -S [rest of your parameters for sudo] < /etc/sudo_password_file
(或者密码文件的名称,包含密码和单行中断。)
来自sudo手册页:
-S The -S (stdin) option causes sudo to read the password from
the standard input instead of the terminal device. The
password must be followed by a newline character.
最简单的方法是使用户根本不必输入密码。
你可以通过运行visudo,然后改变看起来像这样的行来做到这一点:
someuser ALL=(ALL) ALL
至
someuser ALL=(ALL) NOPASSWD: ALL
但是,如果它仅用于一个脚本,那么将无密码访问限制为仅该脚本并删除它会更安全(ALL),因此它们只能以root用户身份运行,而不能以任何用户身份运行,例如
Cmnd_Alias THESCRIPT = /usr/local/bin/scriptname
someuser ALL=NOPASSWD: THESCRIPT
运行man 5 sudoers以查看sudoers手册页中的所有详细信息。
expect但是可以说,但这会让你的用户的密码硬编码到某个地方,人们可以看到它(授予你以正确的方式设置权限,它仍然可以被root读取)。
expect。 man expect详情。
sudo su - user,sudo -iu user改为使用。(sudoers顺便说一下,更容易管理。)