我想要实现自动化
sudo su - user
来自脚本。然后它应该要求输入密码。
答案1
我会尝试猜测你问了什么。
如果您想sudo su - user
在没有密码的情况下使用,您应该(如果您有权限)在 sudoers 文件上执行以下操作:
<youuser> ALL = NOPASSWD: /bin/su - <otheruser>
在哪里:
<yourusername>
是你的用户名 :D (saumun89,即)<otheruser>
是您要更改为的用户
然后放入脚本:
sudo /bin/su - <otheruser>
这样做不会让后续命令运行<otheruser>
,它将生成一个新的 shell。如果您想以其他用户的身份在脚本中运行另一个命令,您应该使用类似以下命令:
sudo -u <otheruser> <command>
在 sudoers 文件中:
<yourusername> ALL = (<otheruser>) NOPASSWD: <command>
显然,更通用的一行如下:
<yourusername> ALL = (ALL) NOPASSWD: ALL
会完成任务,但会授权任何人做任何事情。
答案2
您可以使用命令
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.
答案3
最简单的方法是让用户根本不必输入密码。
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 手册页。
答案4
或者,您可以使用 python pudo 包:https://pypi.org/project/pudo/1.0.0/
安装:
user$ sudo -H pip3 install pudo # you can install using pip2 also
下面是在 root 权限下使用 Python 自动化运行 cmd 的代码片段:
user$ python3 # or python2
>>> import pudo
>>> (ret, out) = pudo.run(('ls', '/root')) # or pudo.run('ls /root')
>>> print(ret)
>>> 0
>>> print(out)
>>> b'Desktop\nDownloads\nPictures\nMusic\n'
下面是在 root 权限下运行 cmd 的示例
user$ pudo ls /root
Desktop Downloads Pictures Music