自动执行“sudo su - user”命令

自动执行“sudo su - user”命令

我想要实现自动化

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

相关内容