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
顺便说一下,更容易管理。)